@@ -213,7 +213,14 @@ function TableDefinition($table,$columns){
213213 }
214214
215215 function setRelation (){
216- $ stmt = $ this ->pdo ->query ('
216+
217+ $ row = $ this ->getRelation ();
218+
219+ db::set ('.RELATIONS ' ,$ row );
220+ }
221+
222+ function getRelation (){
223+ /*
217224 SELECT
218225 `TABLE_SCHEMA`, -- Foreign key schema
219226 `TABLE_NAME`, -- Foreign key table
@@ -227,14 +234,7 @@ function setRelation(){
227234 WHERE
228235 `TABLE_SCHEMA` = SCHEMA() -- Detect current schema in USE
229236 AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys;
230- ' );
231-
232- $ row = $ stmt ->fetchall ();
233-
234- db::set ('.RELATIONS ' ,$ row );
235- }
236-
237- function getRelation (){
237+ */
238238 $ stmt = $ this ->pdo ->query ('
239239 SELECT
240240 `TABLE_SCHEMA`, -- Foreign key schema
@@ -243,7 +243,14 @@ function getRelation(){
243243 `REFERENCED_TABLE_SCHEMA`, -- Origin key schema
244244 `REFERENCED_TABLE_NAME`, -- Origin key table
245245 `REFERENCED_COLUMN_NAME`, -- Origin key column
246- `CONSTRAINT_NAME` -- constraint name
246+ `CONSTRAINT_NAME`, -- constraint name
247+ (SELECT CONCAT(`UPDATE_RULE`, \'| \',`DELETE_RULE`)
248+ FROM `INFORMATION_SCHEMA`.`REFERENTIAL_CONSTRAINTS`
249+ WHERE
250+ `INFORMATION_SCHEMA`.`REFERENTIAL_CONSTRAINTS`.`CONSTRAINT_SCHEMA` = `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`.`TABLE_SCHEMA`
251+ AND
252+ `INFORMATION_SCHEMA`.`REFERENTIAL_CONSTRAINTS`.`CONSTRAINT_NAME` = `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`.`CONSTRAINT_NAME`
253+ ) AS `CASCADE_RULE`
247254 FROM
248255 `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` -- Will fail if user don \'t have privilege
249256 WHERE
@@ -305,13 +312,20 @@ function generateDefaultCommand($definitions){
305312 return '' ;
306313 }
307314
315+ function generateDefaultComment ($ definitions ){
316+ if (!empty ($ definitions ['Comment ' ])){
317+ return "COMMENT ' {$ definitions ['Comment ' ]}' " ;
318+ }
319+ return '' ;
320+ }
321+
308322 function create_table ($ ctable ){
309323 $ entries = array ();
310324 $ primaryKey = array ();
311325 $ keys = array ();
312326 //$this->extra = true;
313327 foreach (db::get ($ ctable ) as $ columnName => $ definitions ) {
314- $ entries [] = '` ' . $ columnName . '` ' . $ definitions ['Type ' ] . ' ' . $ this ->generateCollation ($ definitions ['Collation ' ]) .' ' . $ this ->generateNullCommand ($ definitions ['Null ' ]) . ' ' . $ this ->generateDefaultCommand ($ definitions );
328+ $ entries [] = '` ' . $ columnName . '` ' . $ definitions ['Type ' ] . ' ' . $ this ->generateCollation ($ definitions ['Collation ' ]) .' ' . $ this ->generateNullCommand ($ definitions ['Null ' ]) . ' ' . $ this ->generateDefaultCommand ($ definitions ) . ' ' . $ this -> generateDefaultComment ( $ definitions ) ;
315329
316330 if ($ definitions ['Key ' ] == 'PRI ' ) {
317331 $ primaryKey [] = $ columnName ;
@@ -370,8 +384,6 @@ function column_defination($column){
370384
371385 $ return .= $ this ->generateDefaultCommand ($ column );
372386
373- $ return .= "\n" ;
374-
375387 return $ return ;
376388 }
377389
@@ -392,7 +404,7 @@ function getAlters(){
392404 $ mod_column = array_intersect (array_keys ($ ocolumn ),array_keys ($ ncolumn ));
393405
394406 foreach ($ add_column as $ column ){
395- $ sql [] = "ALTER TABLE $ table ADD COLUMN ` $ column` " .$ this ->column_defination ($ ncolumn [$ column ])."; " ;
407+ $ sql [] = "ALTER TABLE $ table ADD COLUMN ` $ column` " .$ this ->column_defination ($ ncolumn [$ column ])." " . $ this -> generateDefaultComment ( $ ncolumn [ $ column ]). " ; " ;
396408 }
397409
398410 foreach ($ drop_column as $ column ){
@@ -406,7 +418,7 @@ function getAlters(){
406418 $ modify2 = array_diff ($ ocolumn [$ column ],$ ncolumn [$ column ]);
407419 $ modify = array_merge ($ modify1 ,$ modify2 );
408420 if (count ($ modify )){
409- $ sql [] = "ALTER TABLE $ table MODIFY COLUMN ` $ column` " .$ this ->column_defination ($ ncolumn [$ column ])."; " ;
421+ $ sql [] = "ALTER TABLE $ table MODIFY COLUMN ` $ column` " .$ this ->column_defination ($ ncolumn [$ column ])." " . $ this -> generateDefaultComment ( $ ncolumn [ $ column ]) . " ; " ;
410422 }
411423 }
412424 }
@@ -513,6 +525,19 @@ function add_auto_increment(){
513525 }
514526 return $ return ;
515527 }
528+ /* ON UPDATE CASCADE ON DELETE CASCADE */
529+ function cascade_rule ($ cascade_rule ){
530+ $ cascade = explode ("| " ,$ cascade_rule );
531+ $ return = '' ;
532+ /* `UPDATE_RULE`|`DELETE_RULE` */
533+ if ($ cascade [0 ] == 'CASCADE ' ){
534+ $ return .= ' ON UPDATE CASCADE ' ;
535+ }
536+ if ($ cascade [1 ] == 'CASCADE ' ){
537+ $ return .= ' ON DELETE CASCADE ' ;
538+ }
539+ return $ return ;
540+ }
516541
517542 /*
518543 ALTER TABLE `[TABLE_NAME]`
@@ -524,7 +549,7 @@ function addRelations(){
524549 $ rels = db::get ('.RELATIONS ' );
525550 foreach ($ rels as $ rel ){
526551 $ sql [] = "ALTER TABLE ` {$ rel ['TABLE_NAME ' ]}`
527- ADD CONSTRAINT ` {$ rel ['CONSTRAINT_NAME ' ]}` FOREIGN KEY (` {$ rel ['COLUMN_NAME ' ]}`) REFERENCES ` {$ rel ['REFERENCED_TABLE_NAME ' ]}` (` {$ rel ['REFERENCED_COLUMN_NAME ' ]}`); " ;
552+ ADD CONSTRAINT ` {$ rel ['CONSTRAINT_NAME ' ]}` FOREIGN KEY (` {$ rel ['COLUMN_NAME ' ]}`) REFERENCES ` {$ rel ['REFERENCED_TABLE_NAME ' ]}` (` {$ rel ['REFERENCED_COLUMN_NAME ' ]}`) { $ this -> cascade_rule ( $ rel [ ' CASCADE_RULE ' ])} ; " ;
528553 }
529554
530555 return $ sql ;
@@ -599,7 +624,7 @@ function execute($queries){
599624 $ stmt = $ this ->pdo ->prepare ($ query );
600625 $ stmt ->execute (array ());
601626 }catch (PDOException $ e ) {
602- if (defined ('DEBUG ' )){
627+ if (defined ('KDBV_DEBUG ' )){
603628 echo "$ query \n" ;
604629 echo $ e ->getCode ();
605630 echo "\n" ;
0 commit comments