mirror of
https://github.com/typeorm/typeorm.git
synced 2025-12-08 21:26:23 +00:00
feat: add postgres multirange column types (#10627)
* feat: add postgres multirange column types Adds int4-, int8-, num-, ts-, tstz-, date-multirange column types for postgres Update docs to include multirange column types Update functional column-types-postgres test to test multirange column types Closes: #10556 * style: run npm run format --------- Co-authored-by: Dmitry Zotov <dmzt08@gmail.com>
This commit is contained in:
parent
54d8d9efe9
commit
d0b76703cc
@ -1,20 +1,29 @@
|
||||
# Entities
|
||||
|
||||
- [What is Entity?](#what-is-entity)
|
||||
- [Entity columns](#entity-columns)
|
||||
- [Primary columns](#primary-columns)
|
||||
- [Special columns](#special-columns)
|
||||
- [Spatial columns](#spatial-columns)
|
||||
- [Column types](#column-types)
|
||||
- [Column types for `mysql` / `mariadb`](#column-types-for-mysql--mariadb)
|
||||
- [Column types for `postgres` / `cockroachdb`](#column-types-for-postgres)
|
||||
- [Column types for `sqlite` / `cordova` / `react-native` / `expo`](#column-types-for-sqlite--cordova--react-native--expo)
|
||||
- [Column types for `mssql`](#column-types-for-mssql)
|
||||
- [`enum` column type](#enum-column-type)
|
||||
- [`simple-array` column type](#simple-array-column-type)
|
||||
- [`simple-json` column type](#simple-json-column-type)
|
||||
- [Columns with generated values](#columns-with-generated-values)
|
||||
- [Column options](#column-options)
|
||||
- [Entities](#entities)
|
||||
- [What is Entity?](#what-is-entity)
|
||||
- [Entity columns](#entity-columns)
|
||||
- [Primary columns](#primary-columns)
|
||||
- [Special columns](#special-columns)
|
||||
- [Spatial columns](#spatial-columns)
|
||||
- [Column types](#column-types)
|
||||
- [Column types for `mysql` / `mariadb`](#column-types-for-mysql--mariadb)
|
||||
- [Column types for `postgres`](#column-types-for-postgres)
|
||||
- [Column types for `cockroachdb`](#column-types-for-cockroachdb)
|
||||
- [Column types for `sqlite` / `cordova` / `react-native` / `expo`](#column-types-for-sqlite--cordova--react-native--expo)
|
||||
- [Column types for `mssql`](#column-types-for-mssql)
|
||||
- [Column types for `oracle`](#column-types-for-oracle)
|
||||
- [Column types for `spanner`](#column-types-for-spanner)
|
||||
- [`enum` column type](#enum-column-type)
|
||||
- [`set` column type](#set-column-type)
|
||||
- [`simple-array` column type](#simple-array-column-type)
|
||||
- [`simple-json` column type](#simple-json-column-type)
|
||||
- [Columns with generated values](#columns-with-generated-values)
|
||||
- [Column options](#column-options)
|
||||
- [Entity inheritance](#entity-inheritance)
|
||||
- [Tree entities](#tree-entities)
|
||||
- [Adjacency list](#adjacency-list)
|
||||
- [Closure table](#closure-table)
|
||||
|
||||
## What is Entity?
|
||||
|
||||
@ -381,7 +390,8 @@ or
|
||||
`date`, `time`, `time without time zone`, `time with time zone`, `interval`, `bool`, `boolean`,
|
||||
`enum`, `point`, `line`, `lseg`, `box`, `path`, `polygon`, `circle`, `cidr`, `inet`, `macaddr`,
|
||||
`tsvector`, `tsquery`, `uuid`, `xml`, `json`, `jsonb`, `int4range`, `int8range`, `numrange`,
|
||||
`tsrange`, `tstzrange`, `daterange`, `geometry`, `geography`, `cube`, `ltree`
|
||||
`tsrange`, `tstzrange`, `daterange`, `int4multirange`, `int8multirange`, `nummultirange`,
|
||||
`tsmultirange`, `tstzmultirange`, `multidaterange`, `geometry`, `geography`, `cube`, `ltree`
|
||||
|
||||
### Column types for `cockroachdb`
|
||||
|
||||
|
||||
@ -1,21 +1,26 @@
|
||||
# 实体
|
||||
|
||||
* [实体是什么?](#实体是什么)
|
||||
* [实体列](#实体列)
|
||||
* [主列](#主列)
|
||||
* [特殊列](#特殊列)
|
||||
* [空间列](#空间列)
|
||||
* [列类型](#列类型)
|
||||
* [`mysql`/`mariadb`的列类型](#`mysql`/`mariadb`的列类型)
|
||||
* [`postgres`的列类型](#`postgres`的列类型)
|
||||
* [`sqlite`/`cordova`/`react-native`/`expo`的列类型](#sqlite`/`cordova`/`react-native`/`expo`的列类型)
|
||||
* [`mssql`的列类型](#`mssql`的列类型)
|
||||
* [`oracle`的列类型](#`oracle`的列类型)
|
||||
* [`enum`列类型](#`enum`列类型)
|
||||
* [`simple-array`的列类型](#`simple-array`的列类型)
|
||||
* [`simple-json`列类型](#`simple-json`列类型)
|
||||
* [具有生成值的列](#具有生成值的列)
|
||||
* [列选项](#列选项)
|
||||
- [实体](#实体)
|
||||
- [实体是什么?](#实体是什么)
|
||||
- [实体列](#实体列)
|
||||
- [主列](#主列)
|
||||
- [特殊列](#特殊列)
|
||||
- [空间列](#空间列)
|
||||
- [列类型](#列类型)
|
||||
- [`mysql`/`mariadb`的列类型](#mysqlmariadb的列类型)
|
||||
- [`postgres`的列类型](#postgres的列类型)
|
||||
- [`sqlite`/`cordova`/`react-native`/`expo`的列类型](#sqlitecordovareact-nativeexpo的列类型)
|
||||
- [`mssql`的列类型](#mssql的列类型)
|
||||
- [`oracle`的列类型](#oracle的列类型)
|
||||
- [`enum` 列类型](#enum-列类型)
|
||||
- [`simple-array`的列类型](#simple-array的列类型)
|
||||
- [`simple-json` 列类型](#simple-json-列类型)
|
||||
- [具有生成值的列](#具有生成值的列)
|
||||
- [列选项](#列选项)
|
||||
- [实体继承](#实体继承)
|
||||
- [树实体](#树实体)
|
||||
- [邻接列表](#邻接列表)
|
||||
- [Closure 表](#closure-表)
|
||||
|
||||
## 实体是什么?
|
||||
|
||||
@ -271,7 +276,8 @@ TypeORM 支持所有最常用的数据库支持的列类型。
|
||||
`date`, `time`, `time without time zone`, `time with time zone`, `interval`, `bool`, `boolean`,
|
||||
`enum`, `point`, `line`, `lseg`, `box`, `path`, `polygon`, `circle`, `cidr`, `inet`, `macaddr`,
|
||||
`tsvector`, `tsquery`, `uuid`, `xml`, `json`, `jsonb`, `int4range`, `int8range`, `numrange`,
|
||||
`tsrange`, `tstzrange`, `daterange`, `geometry`, `geography`
|
||||
`tsrange`, `tstzrange`, `daterange`, `int4multirange`, `int8multirange`, `nummultirange`,
|
||||
`tsmultirange`, `tstzmultirange`, `multidaterange`, `geometry`, `geography`
|
||||
|
||||
### `sqlite`/`cordova`/`react-native`/`expo`的列类型
|
||||
|
||||
|
||||
@ -180,6 +180,12 @@ export class PostgresDriver implements Driver {
|
||||
"tsrange",
|
||||
"tstzrange",
|
||||
"daterange",
|
||||
"int4multirange",
|
||||
"int8multirange",
|
||||
"nummultirange",
|
||||
"tsmultirange",
|
||||
"tstzmultirange",
|
||||
"datemultirange",
|
||||
"geometry",
|
||||
"geography",
|
||||
"cube",
|
||||
|
||||
@ -172,6 +172,14 @@ export type SimpleColumnType =
|
||||
| "tstzrange" // postgres
|
||||
| "daterange" // postgres
|
||||
|
||||
// multirange types
|
||||
| "int4multirange" // postgres
|
||||
| "int8multirange" // postgres
|
||||
| "nummultirange" // postgres
|
||||
| "tsmultirange" // postgres
|
||||
| "tstzmultirange" // postgres
|
||||
| "datemultirange" // postgres
|
||||
|
||||
// other types
|
||||
| "enum" // mysql, postgres
|
||||
| "set" // mysql
|
||||
|
||||
@ -98,6 +98,15 @@ describe("database schema > column types > postgres", () => {
|
||||
post.tstzrange =
|
||||
"[2010-01-01 14:30:00+00,2010-01-01 15:30:00+00)"
|
||||
post.daterange = "[2010-01-01,2010-01-05)"
|
||||
post.int4multirange = "{[10,20),[25,30)}"
|
||||
post.int8multirange = "{[200000,500000),[600000,700000)}"
|
||||
post.nummultirange = "{(10.5,20.2),(30.5,40.2)}"
|
||||
post.tsmultirange =
|
||||
'{["2010-01-01 14:30:00","2010-01-01 15:30:00"),["2010-01-01 16:30:00","2010-01-01 17:30:00")}'
|
||||
post.tstzmultirange =
|
||||
'{["2010-01-01 14:30:00+00","2010-01-01 15:30:00+00"),["2010-01-01 16:30:00+00","2010-01-01 17:30:00+00")}'
|
||||
post.datemultirange =
|
||||
"{[2010-01-01,2010-01-05),[2010-01-10,2010-01-15)}"
|
||||
post.xml =
|
||||
"<book><title>Manual</title><chapter>...</chapter></book>"
|
||||
post.array = [1, 2, 3]
|
||||
@ -185,6 +194,12 @@ describe("database schema > column types > postgres", () => {
|
||||
`["2010-01-01 14:30:00+00","2010-01-01 15:30:00+00")`,
|
||||
)
|
||||
loadedPost.daterange.should.be.eql(post.daterange)
|
||||
loadedPost.int4multirange.should.be.eql(post.int4multirange)
|
||||
loadedPost.int8multirange.should.be.eql(post.int8multirange)
|
||||
loadedPost.nummultirange.should.be.eql(post.nummultirange)
|
||||
loadedPost.tsmultirange.should.be.eql(post.tsmultirange)
|
||||
loadedPost.tstzmultirange.should.be.eql(post.tstzmultirange)
|
||||
loadedPost.datemultirange.should.be.eql(post.datemultirange)
|
||||
loadedPost.xml.should.be.equal(post.xml)
|
||||
loadedPost.array[0].should.be.equal(post.array[0])
|
||||
loadedPost.array[1].should.be.equal(post.array[1])
|
||||
@ -322,6 +337,24 @@ describe("database schema > column types > postgres", () => {
|
||||
table!
|
||||
.findColumnByName("daterange")!
|
||||
.type.should.be.equal("daterange")
|
||||
table!
|
||||
.findColumnByName("int4multirange")!
|
||||
.type.should.be.equal("int4multirange")
|
||||
table!
|
||||
.findColumnByName("int8multirange")!
|
||||
.type.should.be.equal("int8multirange")
|
||||
table!
|
||||
.findColumnByName("nummultirange")!
|
||||
.type.should.be.equal("nummultirange")
|
||||
table!
|
||||
.findColumnByName("tsmultirange")!
|
||||
.type.should.be.equal("tsmultirange")
|
||||
table!
|
||||
.findColumnByName("tstzmultirange")!
|
||||
.type.should.be.equal("tstzmultirange")
|
||||
table!
|
||||
.findColumnByName("datemultirange")!
|
||||
.type.should.be.equal("datemultirange")
|
||||
table!
|
||||
.findColumnByName("array")!
|
||||
.type.should.be.equal("integer")
|
||||
|
||||
@ -234,6 +234,28 @@ export class Post {
|
||||
@Column("daterange")
|
||||
daterange: string
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Multirange Type
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
@Column("int4multirange")
|
||||
int4multirange: string
|
||||
|
||||
@Column("int8multirange")
|
||||
int8multirange: string
|
||||
|
||||
@Column("nummultirange")
|
||||
nummultirange: string
|
||||
|
||||
@Column("tsmultirange")
|
||||
tsmultirange: string
|
||||
|
||||
@Column("tstzmultirange")
|
||||
tstzmultirange: string
|
||||
|
||||
@Column("datemultirange")
|
||||
datemultirange: string
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Array Type
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user