@@ -26,9 +26,9 @@ class ezSchema
2626
2727 const NUMERICS = [
2828 'common ' => ['NUMERIC ' , 'DECIMAL ' ],
29- 'mysql ' => ['DEC ' , 'FIXED ' , 'FLOAT ' , 'DOUBLE ' , 'DOUBLE PRECISION ' , 'REAL ' ],
30- 'postgresql ' => [],
29+ 'mysql ' => ['IDENTITY ' ,'DEC ' , 'FIXED ' , 'FLOAT ' , 'DOUBLE ' , 'DOUBLE PRECISION ' , 'REAL ' ],
3130 'sqlserver ' => ['DEC ' ],
31+ 'postgresql ' => [],
3232 'sqlite3 ' => []
3333 ];
3434
@@ -52,10 +52,17 @@ class ezSchema
5252
5353 const OPTIONS = ['CONSTRAINT ' , 'PRIMARY KEY ' , 'FOREIGN KEY ' , 'UNIQUE ' , 'INDEX ' , 'REFERENCES ' ];
5454 const CHANGES = [
55- 'mysql ' => ['MODIFY ' ],
56- 'postgresql ' => ['ALTER COLUMN ' ],
57- 'sqlserver ' => ['ALTER COLUMN ' ],
58- 'sqlite3 ' => []
55+ 'mysql ' => 'MODIFY ' ,
56+ 'postgresql ' => 'ALTER COLUMN ' ,
57+ 'sqlserver ' => 'ALTER COLUMN ' ,
58+ 'sqlite3 ' => ''
59+ ];
60+
61+ const autoNUMBERS = [
62+ 'mysql ' => 'AUTO_INCREMENT ' ,
63+ 'postgresql ' => 'SERIAL ' ,
64+ 'sqlserver ' => 'IDENTITY(1,1) ' ,
65+ 'sqlite3 ' => 'AUTOINCREMENT '
5966 ];
6067
6168 private $ arguments = null ;
@@ -151,13 +158,14 @@ public static function vendor()
151158 elseif ($ dbMssql === \getInstance () && !empty ($ dbMssql ))
152159 $ type = 'sqlserver ' ;
153160 elseif ($ dbPdo === \getInstance () && !empty ($ dbPdo )) {
154- if (strpos ($ dbPdo ->getAttribute (\PDO ::ATTR_CLIENT_VERSION ), 'mysql ' ) !== false )
161+ $ dbh = $ dbPdo ->connection ();
162+ if (strpos ($ dbh ->getAttribute (\PDO ::ATTR_CLIENT_VERSION ), 'mysql ' ) !== false )
155163 $ type = 'mysql ' ;
156- elseif (strpos ($ dbPdo ->getAttribute (\PDO ::ATTR_CLIENT_VERSION ), 'pgsql ' ) !== false )
164+ elseif (strpos ($ dbh ->getAttribute (\PDO ::ATTR_CLIENT_VERSION ), 'pgsql ' ) !== false )
157165 $ type = 'postgresql ' ;
158- elseif (strpos ($ dbPdo ->getAttribute (\PDO ::ATTR_CLIENT_VERSION ), 'sqlite ' ) !== false )
166+ elseif (strpos ($ dbh ->getAttribute (\PDO ::ATTR_CLIENT_VERSION ), 'sqlite ' ) !== false )
159167 $ type = 'sqlite3 ' ;
160- elseif (strpos ($ dbPdo ->getAttribute (\PDO ::ATTR_CLIENT_VERSION ), 'sqlsrv ' ) !== false )
168+ elseif (strpos ($ dbh ->getAttribute (\PDO ::ATTR_CLIENT_VERSION ), 'sqlsrv ' ) !== false )
161169 $ type = 'sqlserver ' ;
162170 }
163171
@@ -181,6 +189,7 @@ public static function column(string $column = null, string $type = null, ...$ar
181189 if (empty ($ column ) || empty ($ type ))
182190 return false ;
183191
192+ $ vendor = self ::vendor ();
184193 $ columnData = '' ;
185194 if (($ column == \CONSTRAINT ) || ($ column == \INDEX )) {
186195 if (empty ($ args [0 ]) || empty ($ args [1 ])) {
@@ -190,20 +199,25 @@ public static function column(string $column = null, string $type = null, ...$ar
190199 $ keyType = ($ column != \INDEX ) ? \array_shift ($ args ).' ' : ' ' ;
191200 $ keys = $ keyType .'( ' .\to_string ($ args ).'), ' ;
192201 $ columnData .= $ column .' ' .$ type .' ' .$ keys ;
193- } elseif (($ column == \ADD ) || ($ column == \DROP )) {
202+ } elseif (($ column == \ADD ) || ($ column == \DROP ) || ( $ column == \ CHANGE ) ) {
194203 if ($ column != \DROP ) {
204+ // check for modify placeholder and replace with vendors
205+ $ column = \str_replace (\CHANGE , self ::CHANGES [$ vendor ], $ column );
195206 $ column = $ column .' ' .$ type ;
196207 $ type2 = \array_shift ($ args );
197208 $ data = self ::datatype ($ type2 , ...$ args );
198- } else
209+ } elseif ( $ vendor != ' sqlite3 ' )
199210 $ data = $ type ;
200211
201212 if (!empty ($ data ))
202213 $ columnData = $ column .' ' .$ data .', ' ;
203214 } else {
204215 $ data = self ::datatype ($ type , ...$ args );
205- if (!empty ($ data ))
216+ if (!empty ($ data )) {
217+ // check for sequence placeholder and replace with vendors
218+ $ data = \str_replace (\AUTO , self ::autoNUMBERS[$ vendor ], $ data );
206219 $ columnData = $ column .' ' .$ data .', ' ;
220+ }
207221 }
208222
209223 $ schemaColumns = !empty ($ columnData ) ? $ columnData : null ;
0 commit comments