Skip to content

Commit 9910e9c

Browse files
committed
CASCADE AND COMMENT
ON UPDATE CASCADE ON DELETE CASCADE COMMENT 'ON UPDATE CASCADE ON DELETE CASCADE'
1 parent 1f61568 commit 9910e9c

File tree

4 files changed

+45
-19
lines changed

4 files changed

+45
-19
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,4 @@ index.php
5252
vendor/*
5353
composer.lock
5454
log.txt
55+
check.php

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
## Features
88
* **Upgrade** - Database Upgrade
99
* **Easy** - Extremely easy to learn and use
10-
*
10+
1111
## Requirement
1212

1313
PHP 5.3+ and PDO extension installed

src/kdbv.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ function query(){
5656
$sql = $this->push($sql , $this->getQuery());
5757
$sql = $this->push($sql , $this->getAlters());
5858
$sql = $this->push($sql , $this->addKeys());
59-
$sql = $this->push($sql , $this->addRelations());
6059
$sql = $this->push($sql , $this->addTablestatus());
6160
$sql = $this->push($sql , $this->add_auto_increment());
61+
$sql = $this->push($sql , $this->addRelations());
6262
return $sql;
6363
}
6464

src/table.php

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)