summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEudyptula <eitan@mosenkis.net>2009-06-24 15:14:23 -0400
committerEudyptula <eitan@mosenkis.net>2009-06-24 15:14:23 -0400
commit7eb6b066a50e96ba5f97e173c51fcb7e2f04e06c (patch)
tree36e4dcf704baa30ac68439c67db4c0d1777403a2 /update_sql_classes.php
parentUpdates to sql_row_obj class; moved newclass.php to update_sql_classes.php an... (diff)
downloadingenue-7eb6b066a50e96ba5f97e173c51fcb7e2f04e06c.tar.gz
ingenue-7eb6b066a50e96ba5f97e173c51fcb7e2f04e06c.tar.bz2
ingenue-7eb6b066a50e96ba5f97e173c51fcb7e2f04e06c.zip
Added merging changes in tables into already existing classes in update_sql_classes.php
Diffstat (limited to 'update_sql_classes.php')
-rwxr-xr-xupdate_sql_classes.php69
1 files changed, 44 insertions, 25 deletions
diff --git a/update_sql_classes.php b/update_sql_classes.php
index 24ea938..f807b3c 100755
--- a/update_sql_classes.php
+++ b/update_sql_classes.php
@@ -31,37 +31,39 @@ function prompt_string($prompt, $default=null) {
}
return $answer;
}
-function write_table_class_to_stream($table, $class, $stream) {
+function write_table_class_to_file($table, $class, $file) {
+ $stream=fopen($file, 'w');
fputs($stream, "<?php\n");
$tmpclass='genclass_'.randstring(30);
eval ("class $tmpclass extends sql_row_obj {\nprotected \$table='$table';\t}");
$obj=new $tmpclass();
fputs($stream, str_replace($tmpclass, $class, $obj->to_php()));
fputs($stream, "?>\n");
- fflush($stream);
+ fclose($stream);
}
$pdo=&$S['pdo'];
$r=$pdo->query('SHOW TABLES');
$tables=$r->fetchAll(PDO::FETCH_COLUMN);
+$check_existing=prompt_bool('Check existing classes for changes from the database?');
foreach ($tables as $i => $table) {
- if (sql_row_obj::table_to_class($table)) {
+ if ($class=sql_row_obj::table_to_class($table)) {
unset($tables[$i]);
- $class=$table;
- if (substr($class, -1) == 's') {
- $class=substr($class, 0, strlen($class)-1);
+ if (!$check_existing) {
+ continue;
+ }
+ if (substr($class, 0, 4) == 'sql_') {
+ $origfile=substr($class, 4);
+ } else {
+ $origfile=$class;
}
- $origfile=SHARED.'/classes/'.$class.'.php';
+ $origfile=SHARED.'/classes/'.$origfile.'.php';
if (is_file($origfile)) {
- $tmp=tmpfile();
- $file=stream_get_meta_data($tmp);
- $file=$file['uri'];
- $class='sql_'.$class;
- write_table_class_to_stream($table, $class, $tmp);
- $lines=count(explode("\n", rtrim(file_get_contents($file))))-2;
- $diff=`diff "$origfile" "$file"`;
- $difftmp=tmpfile();
- $diffname=stream_get_meta_data($tmp);
- $diffname=$diffname['uri'];
+ write_table_class_to_file($table, $class, '.temp_class');
+ $lines=count(explode("\n", rtrim(file_get_contents('.temp_class'))))-2;
+ $diff=`diff "$origfile" .temp_class`;
+ $difftmp=fopen('.temp_diff', 'w');
+ $diffname='.temp_diff';
+ $domerge=false;
foreach (explode("\n", $diff) as $line) {
$line.="\n";
if (strlen($line) && is_numeric(substr($line, 0, 1))) {
@@ -72,14 +74,28 @@ foreach ($tables as $i => $table) {
}
}
}
+ if (strlen(trim($line))) {
+ $domerge=true;
+ }
fputs($difftmp, $line);
}
- fflush($difftmp);
- if (filesize($diffname)) {
- system('sdiff --diff-program="cat \''.$diffname.'\'; true" -o merge.tmp "'.$originfile.'" "'.$file.'"');
+ fclose($difftmp);
+ if ($domerge) {
+ copy($origfile, '.temp_class');
+ shell_exec('patch .temp_class < .temp_diff');
+ passthru('colordiff -u "'.$origfile.'" .temp_class');
+ if (prompt_bool('Merge differences?')) {
+ passthru('sdiff -o .temp_class2 "'.$origfile.'" .temp_class');
+ passthru('colordiff -u "'.$origfile.'" .temp_class2');
+ if (prompt_bool('Keep changes?')) {
+ rename('.temp_class2', $origfile);
+ } else {
+ unlink('.temp_class2');
+ }
+ }
}
-// echo $diff;
- fclose($tmp);
+ unlink('.temp_diff');
+ unlink('.temp_class'); // TODO unlink others
}
}
}
@@ -92,12 +108,15 @@ if ($tables) {
echo "No tables found without corresponding classes.\n";
}
if (!$tables) {
+ die("Exiting.\n");
+ /*
echo 'Which tables should we generate classes for? (space-separated) ';
$tables=explode(' ', trim(fgets(STDIN)));
if ($tables[0] == '') {
echo "Exiting.\n";
exit;
}
+ */
}
echo 'Generating classes for table(s): '.implode(', ', $tables)."\n";
foreach ($tables as $table) {
@@ -122,14 +141,14 @@ foreach ($tables as $table) {
}
}
echo 'Writing '.$file.'...';
- $file=fopen($file, 'w');
- write_table_class_to_stream($table, $class, $file);
+// $file=fopen($file, 'w');
+ write_table_class_to_file($table, $class, $file);
/* fputs($file, "<?php\n");
eval ("class fake_class_for_newclass extends sql_row_obj {\nprotected \$table='$table';\t}");
$obj=new fake_class_for_newclass();
fputs($file, str_replace('fake_class_for_newclass', $class, $obj->to_php()));
fputs($file, "?>\n");*/
- fclose($file);
+// fclose($file);
echo "done\n";
}
?>