diff options
author | ondrej.zara <none@none> | 2010-11-22 09:13:16 +0000 |
---|---|---|
committer | ondrej.zara <none@none> | 2010-11-22 09:13:16 +0000 |
commit | 1fdd1a3d3f97a9d98cbccc07f406aca5cca4c5af (patch) | |
tree | e5e1bffef07ad6af9a87e797330a5c7a5ffa3e12 /backend/php-cubrid/index.php | |
parent | 3e12757d60166202318da37f8c95dfe9cf67497c (diff) | |
download | wwwsqldesigner-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.php | 195 |
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 |