4
4
5
5
namespace Yiisoft \Db \Pgsql \Column ;
6
6
7
- use Yiisoft \Db \Pgsql \ Schema ;
7
+ use Yiisoft \Db \Constant \ ColumnType ;
8
8
use Yiisoft \Db \Schema \Column \AbstractColumnFactory ;
9
9
use Yiisoft \Db \Schema \Column \ColumnSchemaInterface ;
10
- use Yiisoft \Db \Schema \SchemaInterface ;
11
10
12
11
use const PHP_INT_SIZE ;
13
12
@@ -46,72 +45,73 @@ final class ColumnFactory extends AbstractColumnFactory
46
45
* @psalm-suppress MissingClassConstType
47
46
*/
48
47
private const TYPE_MAP = [
49
- 'bool ' => SchemaInterface:: TYPE_BOOLEAN ,
50
- 'boolean ' => SchemaInterface:: TYPE_BOOLEAN ,
51
- 'bit ' => SchemaInterface:: TYPE_BIT ,
52
- 'bit varying ' => SchemaInterface:: TYPE_BIT ,
53
- 'varbit ' => SchemaInterface:: TYPE_BIT ,
54
- 'smallint ' => SchemaInterface:: TYPE_SMALLINT ,
55
- 'int2 ' => SchemaInterface:: TYPE_SMALLINT ,
56
- 'smallserial ' => SchemaInterface:: TYPE_SMALLINT ,
57
- 'serial2 ' => SchemaInterface:: TYPE_SMALLINT ,
58
- 'int4 ' => SchemaInterface:: TYPE_INTEGER ,
59
- 'int ' => SchemaInterface:: TYPE_INTEGER ,
60
- 'integer ' => SchemaInterface:: TYPE_INTEGER ,
61
- 'serial ' => SchemaInterface:: TYPE_INTEGER ,
62
- 'serial4 ' => SchemaInterface:: TYPE_INTEGER ,
63
- 'bigint ' => SchemaInterface:: TYPE_BIGINT ,
64
- 'int8 ' => SchemaInterface:: TYPE_BIGINT ,
65
- 'bigserial ' => SchemaInterface:: TYPE_BIGINT ,
66
- 'serial8 ' => SchemaInterface:: TYPE_BIGINT ,
67
- 'oid ' => SchemaInterface:: TYPE_BIGINT , // shouldn't be used. it's pg internal!
68
- 'pg_lsn ' => SchemaInterface:: TYPE_BIGINT ,
69
- 'real ' => SchemaInterface:: TYPE_FLOAT ,
70
- 'float4 ' => SchemaInterface:: TYPE_FLOAT ,
71
- 'float8 ' => SchemaInterface:: TYPE_DOUBLE ,
72
- 'double precision ' => SchemaInterface:: TYPE_DOUBLE ,
73
- 'decimal ' => SchemaInterface:: TYPE_DECIMAL ,
74
- 'numeric ' => SchemaInterface:: TYPE_DECIMAL ,
75
- 'money ' => SchemaInterface:: TYPE_MONEY ,
76
- 'char ' => SchemaInterface:: TYPE_CHAR ,
77
- 'character ' => SchemaInterface:: TYPE_CHAR ,
78
- 'bpchar ' => SchemaInterface:: TYPE_CHAR ,
79
- 'character varying ' => SchemaInterface:: TYPE_STRING ,
80
- 'varchar ' => SchemaInterface:: TYPE_STRING ,
81
- 'text ' => SchemaInterface:: TYPE_TEXT ,
82
- 'bytea ' => SchemaInterface:: TYPE_BINARY ,
83
- 'date ' => SchemaInterface:: TYPE_DATE ,
84
- 'time ' => SchemaInterface:: TYPE_TIME ,
85
- 'time without time zone ' => SchemaInterface:: TYPE_TIME ,
86
- 'time with time zone ' => SchemaInterface:: TYPE_TIME ,
87
- 'timetz ' => SchemaInterface:: TYPE_TIME ,
88
- 'timestamp ' => SchemaInterface:: TYPE_TIMESTAMP ,
89
- 'timestamp without time zone ' => SchemaInterface:: TYPE_TIMESTAMP ,
90
- 'timestamp with time zone ' => SchemaInterface:: TYPE_TIMESTAMP ,
91
- 'timestamptz ' => SchemaInterface:: TYPE_TIMESTAMP ,
92
- 'abstime ' => SchemaInterface:: TYPE_TIMESTAMP ,
93
- 'interval ' => SchemaInterface:: TYPE_STRING ,
94
- 'box ' => SchemaInterface:: TYPE_STRING ,
95
- 'circle ' => SchemaInterface:: TYPE_STRING ,
96
- 'point ' => SchemaInterface:: TYPE_STRING ,
97
- 'line ' => SchemaInterface:: TYPE_STRING ,
98
- 'lseg ' => SchemaInterface:: TYPE_STRING ,
99
- 'polygon ' => SchemaInterface:: TYPE_STRING ,
100
- 'path ' => SchemaInterface:: TYPE_STRING ,
101
- 'cidr ' => SchemaInterface:: TYPE_STRING ,
102
- 'inet ' => SchemaInterface:: TYPE_STRING ,
103
- 'macaddr ' => SchemaInterface:: TYPE_STRING ,
104
- 'tsquery ' => SchemaInterface:: TYPE_STRING ,
105
- 'tsvector ' => SchemaInterface:: TYPE_STRING ,
106
- 'txid_snapshot ' => SchemaInterface:: TYPE_STRING ,
107
- 'unknown ' => SchemaInterface:: TYPE_STRING ,
108
- 'uuid ' => SchemaInterface:: TYPE_STRING ,
109
- 'xml ' => SchemaInterface:: TYPE_STRING ,
110
- 'json ' => SchemaInterface:: TYPE_JSON ,
111
- 'jsonb ' => SchemaInterface:: TYPE_JSON ,
48
+ 'bool ' => ColumnType:: BOOLEAN ,
49
+ 'boolean ' => ColumnType:: BOOLEAN ,
50
+ 'bit ' => ColumnType:: BIT ,
51
+ 'bit varying ' => ColumnType:: BIT ,
52
+ 'varbit ' => ColumnType:: BIT ,
53
+ 'smallint ' => ColumnType:: SMALLINT ,
54
+ 'int2 ' => ColumnType:: SMALLINT ,
55
+ 'smallserial ' => ColumnType:: SMALLINT ,
56
+ 'serial2 ' => ColumnType:: SMALLINT ,
57
+ 'int4 ' => ColumnType:: INTEGER ,
58
+ 'int ' => ColumnType:: INTEGER ,
59
+ 'integer ' => ColumnType:: INTEGER ,
60
+ 'serial ' => ColumnType:: INTEGER ,
61
+ 'serial4 ' => ColumnType:: INTEGER ,
62
+ 'bigint ' => ColumnType:: BIGINT ,
63
+ 'int8 ' => ColumnType:: BIGINT ,
64
+ 'bigserial ' => ColumnType:: BIGINT ,
65
+ 'serial8 ' => ColumnType:: BIGINT ,
66
+ 'oid ' => ColumnType:: BIGINT , // shouldn't be used. it's pg internal!
67
+ 'pg_lsn ' => ColumnType:: BIGINT ,
68
+ 'real ' => ColumnType:: FLOAT ,
69
+ 'float4 ' => ColumnType:: FLOAT ,
70
+ 'float8 ' => ColumnType:: DOUBLE ,
71
+ 'double precision ' => ColumnType:: DOUBLE ,
72
+ 'decimal ' => ColumnType:: DECIMAL ,
73
+ 'numeric ' => ColumnType:: DECIMAL ,
74
+ 'money ' => ColumnType:: MONEY ,
75
+ 'char ' => ColumnType:: CHAR ,
76
+ 'character ' => ColumnType:: CHAR ,
77
+ 'bpchar ' => ColumnType:: CHAR ,
78
+ 'character varying ' => ColumnType:: STRING ,
79
+ 'varchar ' => ColumnType:: STRING ,
80
+ 'text ' => ColumnType:: TEXT ,
81
+ 'bytea ' => ColumnType:: BINARY ,
82
+ 'date ' => ColumnType:: DATE ,
83
+ 'time ' => ColumnType:: TIME ,
84
+ 'time without time zone ' => ColumnType:: TIME ,
85
+ 'time with time zone ' => ColumnType:: TIME ,
86
+ 'timetz ' => ColumnType:: TIME ,
87
+ 'timestamp ' => ColumnType:: TIMESTAMP ,
88
+ 'timestamp without time zone ' => ColumnType:: TIMESTAMP ,
89
+ 'timestamp with time zone ' => ColumnType:: TIMESTAMP ,
90
+ 'timestamptz ' => ColumnType:: TIMESTAMP ,
91
+ 'abstime ' => ColumnType:: TIMESTAMP ,
92
+ 'interval ' => ColumnType:: STRING ,
93
+ 'box ' => ColumnType:: STRING ,
94
+ 'circle ' => ColumnType:: STRING ,
95
+ 'point ' => ColumnType:: STRING ,
96
+ 'line ' => ColumnType:: STRING ,
97
+ 'lseg ' => ColumnType:: STRING ,
98
+ 'polygon ' => ColumnType:: STRING ,
99
+ 'path ' => ColumnType:: STRING ,
100
+ 'cidr ' => ColumnType:: STRING ,
101
+ 'inet ' => ColumnType:: STRING ,
102
+ 'macaddr ' => ColumnType:: STRING ,
103
+ 'tsquery ' => ColumnType:: STRING ,
104
+ 'tsvector ' => ColumnType:: STRING ,
105
+ 'txid_snapshot ' => ColumnType:: STRING ,
106
+ 'unknown ' => ColumnType:: STRING ,
107
+ 'uuid ' => ColumnType:: STRING ,
108
+ 'xml ' => ColumnType:: STRING ,
109
+ 'json ' => ColumnType:: JSON ,
110
+ 'jsonb ' => ColumnType:: JSON ,
112
111
];
113
112
114
113
/**
114
+ * @psalm-param ColumnType::* $type
115
115
* @psalm-param ColumnInfo $info
116
116
* @psalm-suppress MoreSpecificImplementedParamType
117
117
*/
@@ -125,17 +125,18 @@ public function fromType(string $type, array $info = []): ColumnSchemaInterface
125
125
->dimension ($ dimension )
126
126
->column ($ this ->fromType ($ type , $ info ));
127
127
} else {
128
+ /** @psalm-suppress ArgumentTypeCoercion */
128
129
$ column = match ($ type ) {
129
- SchemaInterface:: TYPE_BOOLEAN => new BooleanColumnSchema ($ type ),
130
- SchemaInterface:: TYPE_BIT => new BitColumnSchema ($ type ),
131
- SchemaInterface:: TYPE_TINYINT => new IntegerColumnSchema ($ type ),
132
- SchemaInterface:: TYPE_SMALLINT => new IntegerColumnSchema ($ type ),
133
- SchemaInterface:: TYPE_INTEGER => new IntegerColumnSchema ($ type ),
134
- SchemaInterface:: TYPE_BIGINT => PHP_INT_SIZE !== 8
130
+ ColumnType:: BOOLEAN => new BooleanColumnSchema ($ type ),
131
+ ColumnType:: BIT => new BitColumnSchema ($ type ),
132
+ ColumnType:: TINYINT => new IntegerColumnSchema ($ type ),
133
+ ColumnType:: SMALLINT => new IntegerColumnSchema ($ type ),
134
+ ColumnType:: INTEGER => new IntegerColumnSchema ($ type ),
135
+ ColumnType:: BIGINT => PHP_INT_SIZE !== 8
135
136
? new BigIntColumnSchema ($ type )
136
137
: new IntegerColumnSchema ($ type ),
137
- SchemaInterface:: TYPE_BINARY => new BinaryColumnSchema ($ type ),
138
- Schema:: TYPE_STRUCTURED => (new StructuredColumnSchema ($ type ))->columns ($ info ['columns ' ] ?? []),
138
+ ColumnType:: BINARY => new BinaryColumnSchema ($ type ),
139
+ ColumnType:: STRUCTURED => (new StructuredColumnSchema ($ type ))->columns ($ info ['columns ' ] ?? []),
139
140
default => parent ::fromType ($ type , $ info ),
140
141
};
141
142
}
@@ -145,6 +146,6 @@ public function fromType(string $type, array $info = []): ColumnSchemaInterface
145
146
146
147
protected function getType (string $ dbType , array $ info = []): string
147
148
{
148
- return self ::TYPE_MAP [$ dbType ] ?? SchemaInterface:: TYPE_STRING ;
149
+ return self ::TYPE_MAP [$ dbType ] ?? ColumnType:: STRING ;
149
150
}
150
151
}
0 commit comments