summaryrefslogtreecommitdiffstats
path: root/backend/php-cubrid/index.php
diff options
context:
space:
mode:
authorondrej.zara <none@none>2010-11-22 09:13:16 +0000
committerondrej.zara <none@none>2010-11-22 09:13:16 +0000
commit1fdd1a3d3f97a9d98cbccc07f406aca5cca4c5af (patch)
treee5e1bffef07ad6af9a87e797330a5c7a5ffa3e12 /backend/php-cubrid/index.php
parent3e12757d60166202318da37f8c95dfe9cf67497c (diff)
downloadwwwsqldesigner-1fdd1a3d3f97a9d98cbccc07f406aca5cca4c5af.zip
wwwsqldesigner-1fdd1a3d3f97a9d98cbccc07f406aca5cca4c5af.tar.gz
wwwsqldesigner-1fdd1a3d3f97a9d98cbccc07f406aca5cca4c5af.tar.bz2
CUBRID support, thanks to Catalin Ciobanu
--HG-- extra : convert_revision : svn%3Ab267cdba-c1da-11dd-874b-8bacd04a0a74/trunk%40115
Diffstat (limited to 'backend/php-cubrid/index.php')
-rw-r--r--backend/php-cubrid/index.php195
1 files changed, 195 insertions, 0 deletions
diff --git a/backend/php-cubrid/index.php b/backend/php-cubrid/index.php
new file mode 100644
index 0000000..f575585
--- /dev/null
+++ b/backend/php-cubrid/index.php
@@ -0,0 +1,195 @@
+<?php
+ require_once('cubrid_mysql_compat.php');
+
+ if (!function_exists('cubrid_connect') || !function_exists('cubrid_mysql_connect')) {
+ echo "Either Cubrid or the Cubrid MySQL compatibility library is not detected." . "<br />";
+ echo "Please check your instalation." . "<br />";
+ die;
+ }
+
+ set_time_limit(0);
+
+ function setup_saveloadlist() {
+ define("SERVER", "localhost:30000");
+ define("USER", "dba");
+ define("PASSWORD", "");
+ define("DB", "demodb");
+ define("TABLE", "wwwsqldesigner");
+ }
+ function setup_import() {
+ define("SERVER", "localhost:30000");
+ define("USER", "dba");
+ define("PASSWORD", "");
+ define("DB", "demodb");
+ }
+ function connect() {
+ $conn = cubrid_mysql_connect(SERVER, USER, PASSWORD, DB);
+ if (!$conn) {
+ return false;
+ }
+ return $conn;
+ }
+
+ function import($conn) {
+ $xml = "";
+
+ $arr = array();
+ @ $datatypes = file("../../db/cubrid/datatypes.xml");
+ $arr[] = $datatypes[0];
+ $arr[] = '<sql db="cubrid">';
+ for ($i=1;$i<count($datatypes);$i++) {
+ $arr[] = $datatypes[$i];
+ }
+
+ $result = cubrid_mysql_query_native("select class_name from db_class WHERE class_type='CLASS' and is_system_class = 'NO' order by class_name", $conn);
+ if (cubrid_mysql_num_rows($result) > 0) {
+ while ($row = cubrid_mysql_fetch_assoc($result)) {
+ $table = $row["class_name"];
+ $xml .= '<table name="'.$table.'">';
+
+ $q = get_SQL_describeTableSQL($table);
+ $result2 = cubrid_mysql_query_native($q, $conn);
+ while ($row = cubrid_mysql_fetch_assoc($result2)) {
+ $name = $row["Field"];
+ $type = str_replace(",0)", ")", $row["Type"]);
+ $null = ($row["Null"] == "YES" ? "1" : "0");
+ $def = $row["Default"];
+ $ai = (preg_match("/auto_increment/i",$row["Extra"]) ? "1" : "0");
+ if ($def == "NULL") {
+ $def = "";
+ }
+ $xml .= '<row name="'.$name.'" null="'.$null.'" autoincrement="'.$ai.'">';
+ $xml .= '<datatype>'.strtoupper($type).'</datatype>';
+ $xml .= '<default>'.$def.'</default>';
+
+ /* fk constraints */
+ /*
+ $q = "SELECT
+ REFERENCED_TABLE_NAME AS 'table', REFERENCED_COLUMN_NAME AS 'column'
+ FROM KEY_COLUMN_USAGE k
+ LEFT JOIN TABLE_CONSTRAINTS c
+ ON k.CONSTRAINT_NAME = c.CONSTRAINT_NAME
+ WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
+ AND c.TABLE_SCHEMA = '".$db."' AND c.TABLE_NAME = '".$table."'
+ AND k.COLUMN_NAME = '".$name."'";
+ */
+ $q = "SELECT NULL AS `table`, NULL AS `column` FROM db_root"; //no PHP support in CUBRID for FK
+ $result3 = cubrid_mysql_query_native($q, $conn);
+
+ while ($row = cubrid_mysql_fetch_assoc($result3)) {
+ $xml .= '<relation table="'.$row["table"].'" row="'.$row["column"].'" />';
+ }
+
+ $xml .= '</row>';
+ }
+
+ /* keys */
+ $q = get_SQL_SHOW_INDEX_FROM($table);
+ $result2 = cubrid_mysql_query_native($q, $conn);
+ $idx = array();
+
+ while ($row = cubrid_mysql_fetch_assoc($result2)) {
+ $name = $row["Key_name"];
+ if (array_key_exists($name, $idx)) {
+ $obj = $idx[$name];
+ } else {
+ $t = "INDEX";
+
+ if ($row["Non_unique"] == "0") {
+ $t = "UNIQUE";
+ }
+
+ if(columnIsPK($conn, $table, $row["Column_name"])) {
+ $t = "PRIMARY";
+ }
+
+ $obj = array(
+ "columns" => array(),
+ "type" => $t
+ );
+ }
+
+ $obj["columns"][] = $row["Column_name"];
+ $idx[$name] = $obj;
+ }
+
+ foreach ($idx as $name=>$obj) {
+ $xml .= '<key name="'.$name.'" type="'.$obj["type"].'">';
+ for ($i=0;$i<count($obj["columns"]);$i++) {
+ $col = $obj["columns"][$i];
+ $xml .= '<part>'.$col.'</part>';
+ }
+ $xml .= '</key>';
+ }
+ $xml .= "</table>";
+ }
+ } else {
+ $xml = "<No tables found/>";
+ }
+ $arr[] = $xml;
+ $arr[] = '</sql>';
+ return implode("\n",$arr);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ $a = (isset($_GET["action"]) ? $_GET["action"] : false);
+ switch ($a) {
+ case "list":
+ setup_saveloadlist();
+ $conn = connect();
+ $sql = "SELECT `keyword`, DATE_FORMAT(`dt`, '%d-%M-%Y %H:%i') AS dt FROM ".TABLE." ORDER BY dt DESC";
+ $result = cubrid_mysql_query_native($sql, $conn);
+ if(cubrid_mysql_num_rows($result) > 0) {
+ while ($row = cubrid_mysql_fetch_assoc($result)) {
+ echo $row["keyword"]." [".$row["dt"]."]\n";
+ }
+ }
+ break;
+ case "save":
+ setup_saveloadlist();
+ $conn = connect();
+ $keyword = (isset($_GET["keyword"]) ? $_GET["keyword"] : "");
+ $keyword = cubrid_mysql_real_escape_string($keyword);
+ $data = file_get_contents("php://input");
+ if (get_magic_quotes_gpc() || get_magic_quotes_runtime()) {
+ $data = stripslashes($data);
+ }
+ $data = cubrid_mysql_real_escape_string($data);
+ $r = cubrid_mysql_query_native("SELECT * FROM ".TABLE." WHERE `keyword` = '".$keyword."'", $conn);
+ if (cubrid_mysql_num_rows($r) > 0) {
+ $res = cubrid_mysql_query_native("UPDATE ".TABLE." SET `data` = '".$data."', `dt`=SYS_TIMESTAMP WHERE `keyword` = '".$keyword."'", $conn);
+ } else {
+ $res = cubrid_mysql_query_native("INSERT INTO ".TABLE." (`keyword`, `data`, `dt`) VALUES ('".$keyword."', '".$data."', SYS_TIMESTAMP)", $conn);
+ }
+ if (!$res) {
+ header("HTTP/1.0 500 Internal Server Error");
+ } else {
+ header("HTTP/1.0 201 Created");
+ }
+ break;
+ case "load":
+ setup_saveloadlist();
+ $conn = connect();
+ $keyword = (isset($_GET["keyword"]) ? $_GET["keyword"] : "");
+ $keyword = cubrid_mysql_real_escape_string($keyword);
+ $result = cubrid_mysql_query_native("SELECT `data` FROM ".TABLE." WHERE `keyword` = '".$keyword."'", $conn);
+ $row = cubrid_mysql_fetch_assoc($result);
+ if (!$row) {
+ header("HTTP/1.0 404 Not Found");
+ } else {
+ header("Content-type: text/xml");
+ echo $row["data"];
+ }
+ break;
+ case "import":
+ setup_import();
+ $conn = connect();
+ header("Content-type: text/xml");
+ $txt = import($conn);
+ echo $txt;
+ break;
+ default: header("HTTP/1.0 501 Not Implemented");
+ }
+
+?> \ No newline at end of file