comparison msitegen.inc.php @ 1110:a5f52e54c9da

Improve stDBGetTableSchema().
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 16 May 2019 23:25:49 +0300
parents ac3bd4e94555
children f9556e72c2d3
comparison
equal deleted inserted replaced
1109:ac3bd4e94555 1110:a5f52e54c9da
740 global $db; 740 global $db;
741 return stDBExecSQL(($dbh !== FALSE) ? $dbh : $db, "COMMIT"); 741 return stDBExecSQL(($dbh !== FALSE) ? $dbh : $db, "COMMIT");
742 } 742 }
743 743
744 744
745 function stDBGetTableSchema($dbh, $data) 745 function stDBGetTableSchema($dbh, $schema)
746 { 746 {
747 $res = array(); 747 $res = [];
748 $driver = $dbh->getAttribute(PDO::ATTR_DRIVER_NAME); 748 $driver = $dbh->getAttribute(PDO::ATTR_DRIVER_NAME);
749 749
750 foreach ($data as $col) 750 // Go through the table schema, definition by definition
751 { 751 foreach ($schema as $scol)
752 $tmp = array(); 752 {
753 753 $tmp = [];
754
755 // And each element of the one definition
756 // (like 'foo INTEGER AUTOINCREMENT')
757 foreach ($scol as $elem)
754 switch ($driver) 758 switch ($driver)
755 { 759 {
756 case "pgsql": 760 case "pgsql":
757 foreach ($col as $elem) 761 switch ($elem)
758 { 762 {
759 // For Postgres, use SERIAL for autoincrement 763 case "AUTOINCREMENT":
760 if ($elem == "AUTOINCREMENT") 764 // For Postgres, use SERIAL for autoincrement and
765 // "cleverly" replace the 2nd element with SERIAL
766 // assuming that it is INTEGER or such.
761 $tmp[1] = "SERIAL"; 767 $tmp[1] = "SERIAL";
762 else 768 break;
769
770 case "DATETIME":
771 $tmp[] = "TIMESTAMPTZ";
772 break;
773
774 default:
763 $tmp[] = $elem; 775 $tmp[] = $elem;
776 break;
764 } 777 }
765 break; 778 break;
766 779
767 case "mysql": 780 case "mysql":
768 foreach ($col as $elem) 781 switch ($elem)
769 { 782 {
770 if ($elem == "AUTOINCREMENT") 783 case "AUTOINCREMENT":
771 $tmp[] = "AUTO_INCREMENT"; 784 $tmp[] = "AUTO_INCREMENT";
772 else 785 break;
786
787 default:
773 $tmp[] = $elem; 788 $tmp[] = $elem;
789 break;
774 } 790 }
775 break; 791 break;
776 792
777 case "sqlite": 793 case "sqlite":
778 $tmp = $col; 794 $tmp[] = $elem;
779 break; 795 break;
780 796
781 default: 797 default:
782 die("Don't know how to handle PDO driver '".$driver."' yet.\n"); 798 die("Don't know how to handle PDO driver '".$driver."'.\n");
783 } 799 }
784 800
785 $res[] = implode(" ", $tmp); 801 $res[] = implode(" ", $tmp);
786 } 802 }
787 803
788 return implode(", ", $res); 804 return implode(", ", $res);
789 } 805 }