The branch, master has been updated
via 8ff9a1bb7860ff30da83f1eca0860f81a767a637 (commit)
via ff7116bf7eed70f8848cdc1ba1702c5cf1cc8125 (commit)
via 4ec9c3b09c0c716c008423efd52ea1202fe36679 (commit)
via f1bcbb500aa38ddd174480da8adee217ce7decfd (commit)
via 94b83dc3e9bc46d090c4f5250294f378bb9cf0c3 (commit)
from 117dd687575b4af0f24ae6f79773122a5a133a23 (commit)
- Log -----------------------------------------------------------------
commit 8ff9a1bb7860ff30da83f1eca0860f81a767a637
Author: Piotr Przybylski <[email protected]>
Date: Thu Jul 14 21:30:47 2011 +0200
Whitespace
commit ff7116bf7eed70f8848cdc1ba1702c5cf1cc8125
Author: Piotr Przybylski <[email protected]>
Date: Thu Jul 14 21:28:41 2011 +0200
Fix CodeGen export
commit 4ec9c3b09c0c716c008423efd52ea1202fe36679
Author: Piotr Przybylski <[email protected]>
Date: Thu Jul 14 21:13:47 2011 +0200
Use PMA_DBI_get_columns in mediawiki export
commit f1bcbb500aa38ddd174480da8adee217ce7decfd
Author: Piotr Przybylski <[email protected]>
Date: Thu Jul 14 02:37:21 2011 +0200
Use PMA_DBI_get_columns in latex export
commit 94b83dc3e9bc46d090c4f5250294f378bb9cf0c3
Author: Piotr Przybylski <[email protected]>
Date: Thu Jul 14 02:36:09 2011 +0200
Escape column name in PMA_DBI_get_columns_full
-----------------------------------------------------------------------
Summary of changes:
libraries/database_interface.lib.php | 2 +-
libraries/export/codegen.php | 340 ++++++++++++++++++----------------
libraries/export/latex.php | 12 +-
libraries/export/mediawiki.php | 18 +-
4 files changed, 192 insertions(+), 180 deletions(-)
diff --git a/libraries/database_interface.lib.php
b/libraries/database_interface.lib.php
index ef2783d..ca50600 100644
--- a/libraries/database_interface.lib.php
+++ b/libraries/database_interface.lib.php
@@ -769,7 +769,7 @@ function PMA_DBI_get_columns_full($database = null, $table
= null,
$sql = 'SHOW FULL COLUMNS FROM '
. PMA_backquote($database) . '.' . PMA_backquote($table);
if (null !== $column) {
- $sql .= " LIKE '" . $column . "'";
+ $sql .= " LIKE '" . PMA_sqlAddSlashes($column, true) . "'";
}
$columns = PMA_DBI_fetch_result($sql, 'Field', null, $link);
diff --git a/libraries/export/codegen.php b/libraries/export/codegen.php
index fb81cf9..ffed7d1 100644
--- a/libraries/export/codegen.php
+++ b/libraries/export/codegen.php
@@ -123,12 +123,12 @@ function PMA_exportDBCreate($db)
*/
function PMA_exportData($db, $table, $crlf, $error_url, $sql_query)
{
- global $CG_FORMATS, $CG_HANDLERS;
- $format = cgGetOption("format");
- $index = array_search($format, $CG_FORMATS);
- if ($index >= 0)
- return PMA_exportOutputHandler($CG_HANDLERS[$index]($db,
$table, $crlf));
- return PMA_exportOutputHandler(sprintf("%s is not supported.",
$format));
+ global $CG_FORMATS, $CG_HANDLERS;
+ $format = cgGetOption("format");
+ if (isset($CG_FORMATS[$format])) {
+ return PMA_exportOutputHandler($CG_HANDLERS[$format]($db, $table,
$crlf));
+ }
+ return PMA_exportOutputHandler(sprintf("%s is not supported.", $format));
}
/**
@@ -138,162 +138,184 @@ function PMA_exportData($db, $table, $crlf, $error_url,
$sql_query)
*/
class TableProperty
{
- public $name;
- public $type;
- public $nullable;
- public $key;
- public $defaultValue;
- public $ext;
- function __construct($row)
- {
- $this->name = trim($row[0]);
- $this->type = trim($row[1]);
- $this->nullable = trim($row[2]);
- $this->key = trim($row[3]);
- $this->defaultValue = trim($row[4]);
- $this->ext = trim($row[5]);
- }
- function getPureType()
- {
- $pos=strpos($this->type, "(");
- if ($pos > 0)
- return substr($this->type, 0, $pos);
- return $this->type;
- }
- function isNotNull()
- {
- return $this->nullable == "NO" ? "true" : "false";
- }
- function isUnique()
- {
- return $this->key == "PRI" || $this->key == "UNI" ? "true" :
"false";
- }
- function getDotNetPrimitiveType()
- {
- if (strpos($this->type, "int") === 0) return "int";
- if (strpos($this->type, "long") === 0) return "long";
- if (strpos($this->type, "char") === 0) return "string";
- if (strpos($this->type, "varchar") === 0) return "string";
- if (strpos($this->type, "text") === 0) return "string";
- if (strpos($this->type, "longtext") === 0) return "string";
- if (strpos($this->type, "tinyint") === 0) return "bool";
- if (strpos($this->type, "datetime") === 0) return "DateTime";
- return "unknown";
- }
- function getDotNetObjectType()
- {
- if (strpos($this->type, "int") === 0) return "Int32";
- if (strpos($this->type, "long") === 0) return "Long";
- if (strpos($this->type, "char") === 0) return "String";
- if (strpos($this->type, "varchar") === 0) return "String";
- if (strpos($this->type, "text") === 0) return "String";
- if (strpos($this->type, "longtext") === 0) return "String";
- if (strpos($this->type, "tinyint") === 0) return "Boolean";
- if (strpos($this->type, "datetime") === 0) return "DateTime";
- return "Unknown";
- }
- function getIndexName()
- {
- if (strlen($this->key)>0)
- return "index=\"" . $this->name . "\"";
- return "";
- }
- function isPK()
- {
- return $this->key=="PRI";
- }
- function format($pattern)
- {
- $text=$pattern;
- $text=str_replace("#name#", $this->name, $text);
- $text=str_replace("#type#", $this->getPureType(), $text);
- $text=str_replace("#notNull#", $this->isNotNull(), $text);
- $text=str_replace("#unique#", $this->isUnique(), $text);
- $text=str_replace("#ucfirstName#", ucfirst($this->name), $text);
- $text=str_replace("#dotNetPrimitiveType#",
$this->getDotNetPrimitiveType(), $text);
- $text=str_replace("#dotNetObjectType#",
$this->getDotNetObjectType(), $text);
- $text=str_replace("#indexName#", $this->getIndexName(), $text);
- return $text;
- }
+ public $name;
+ public $type;
+ public $nullable;
+ public $key;
+ public $defaultValue;
+ public $ext;
+ function __construct($row)
+ {
+ $this->name = trim($row[0]);
+ $this->type = trim($row[1]);
+ $this->nullable = trim($row[2]);
+ $this->key = trim($row[3]);
+ $this->defaultValue = trim($row[4]);
+ $this->ext = trim($row[5]);
+ }
+ function getPureType()
+ {
+ $pos=strpos($this->type, "(");
+ if ($pos > 0)
+ return substr($this->type, 0, $pos);
+ return $this->type;
+ }
+ function isNotNull()
+ {
+ return $this->nullable == "NO" ? "true" : "false";
+ }
+ function isUnique()
+ {
+ return $this->key == "PRI" || $this->key == "UNI" ? "true" : "false";
+ }
+ function getDotNetPrimitiveType()
+ {
+ if (strpos($this->type, "int") === 0) return "int";
+ if (strpos($this->type, "long") === 0) return "long";
+ if (strpos($this->type, "char") === 0) return "string";
+ if (strpos($this->type, "varchar") === 0) return "string";
+ if (strpos($this->type, "text") === 0) return "string";
+ if (strpos($this->type, "longtext") === 0) return "string";
+ if (strpos($this->type, "tinyint") === 0) return "bool";
+ if (strpos($this->type, "datetime") === 0) return "DateTime";
+ return "unknown";
+ }
+ function getDotNetObjectType()
+ {
+ if (strpos($this->type, "int") === 0) return "Int32";
+ if (strpos($this->type, "long") === 0) return "Long";
+ if (strpos($this->type, "char") === 0) return "String";
+ if (strpos($this->type, "varchar") === 0) return "String";
+ if (strpos($this->type, "text") === 0) return "String";
+ if (strpos($this->type, "longtext") === 0) return "String";
+ if (strpos($this->type, "tinyint") === 0) return "Boolean";
+ if (strpos($this->type, "datetime") === 0) return "DateTime";
+ return "Unknown";
+ }
+ function getIndexName()
+ {
+ if (strlen($this->key)>0)
+ return "index=\"" . htmlspecialchars($this->name, ENT_COMPAT,
'UTF-8') . "\"";
+ return "";
+ }
+ function isPK()
+ {
+ return $this->key=="PRI";
+ }
+ function formatCs($text)
+ {
+ $text=str_replace("#name#", cgMakeIdentifier($this->name, false),
$text);
+ return $this->format($text);
+ }
+ function formatXml($text)
+ {
+ $text=str_replace("#name#", htmlspecialchars($this->name, ENT_COMPAT,
'UTF-8'), $text);
+ $text=str_replace("#indexName#", $this->getIndexName(), $text);
+ return $this->format($text);
+ }
+ function format($text)
+ {
+ $text=str_replace("#ucfirstName#", cgMakeIdentifier($this->name),
$text);
+ $text=str_replace("#dotNetPrimitiveType#",
$this->getDotNetPrimitiveType(), $text);
+ $text=str_replace("#dotNetObjectType#", $this->getDotNetObjectType(),
$text);
+ $text=str_replace("#type#", $this->getPureType(), $text);
+ $text=str_replace("#notNull#", $this->isNotNull(), $text);
+ $text=str_replace("#unique#", $this->isUnique(), $text);
+ return $text;
+ }
}
- function handleNHibernateCSBody($db, $table, $crlf)
- {
- $lines=array();
- $result=PMA_DBI_query(sprintf("DESC %s.%s", PMA_backquote($db),
PMA_backquote($table)));
- if ($result)
- {
- $tableProperties=array();
- while ($row = PMA_DBI_fetch_row($result))
- $tableProperties[] = new TableProperty($row);
- $lines[] = "using System;";
- $lines[] = "using System.Collections;";
- $lines[] = "using System.Collections.Generic;";
- $lines[] = "using System.Text;";
- $lines[] = "namespace ".ucfirst($db);
- $lines[] = "{";
- $lines[] = " #region ".ucfirst($table);
- $lines[] = " public class ".ucfirst($table);
- $lines[] = " {";
- $lines[] = " #region Member Variables";
- foreach ($tableProperties as $tablePropertie)
- $lines[] = $tablePropertie->format("
protected #dotNetPrimitiveType# _#name#;");
- $lines[] = " #endregion";
- $lines[] = " #region Constructors";
- $lines[] = " public ".ucfirst($table)."() {
}";
- $temp = array();
- foreach ($tableProperties as $tablePropertie)
- if (! $tablePropertie->isPK())
- $temp[] =
$tablePropertie->format("#dotNetPrimitiveType# #name#");
- $lines[] = " public
".ucfirst($table)."(".implode(", ", $temp).")";
- $lines[] = " {";
- foreach ($tableProperties as $tablePropertie)
- if (! $tablePropertie->isPK())
- $lines[] = $tablePropertie->format("
this._#name#=#name#;");
- $lines[] = " }";
- $lines[] = " #endregion";
- $lines[] = " #region Public Properties";
- foreach ($tableProperties as $tablePropertie)
- $lines[] = $tablePropertie->format("
public virtual #dotNetPrimitiveType# _#ucfirstName#\n {\n
get {return _#name#;}\n set {_#name#=value;}\n
}");
- $lines[] = " #endregion";
- $lines[] = " }";
- $lines[] = " #endregion";
- $lines[] = "}";
- PMA_DBI_free_result($result);
- }
- return implode("\n", $lines);
- }
+ function cgMakeIdentifier($str, $ucfirst = true)
+ {
+ // remove unsafe characters
+ $str = preg_replace('/[^\p{L}\p{Nl}_]/u', '', $str);
+ // make sure first character is a letter or _
+ if (!preg_match('/^\pL/u', $str)) {
+ $str = '_' . $str;
+ }
+ if ($ucfirst) {
+ $str = ucfirst($str);
+ }
+ return $str;
+ }
- function handleNHibernateXMLBody($db, $table, $crlf)
- {
- $lines=array();
- $lines[] = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
- $lines[] = "<hibernate-mapping
xmlns=\"urn:nhibernate-mapping-2.2\"
namespace=\"".ucfirst(htmlspecialchars($db, ENT_COMPAT, 'UTF-8'))."\"
assembly=\"".ucfirst(htmlspecialchars($db, ENT_COMPAT, 'UTF-8'))."\">";
- $lines[] = " <class
name=\"".ucfirst(htmlspecialchars($table, ENT_COMPAT, 'UTF-8'))."\"
table=\"".htmlspecialchars($table, ENT_COMPAT, 'UTF-8')."\">";
- $result = PMA_DBI_query(sprintf("DESC %s.%s",
PMA_backquote($db), PMA_backquote($table)));
- if ($result)
- {
- $tableProperties = array();
- while ($row = PMA_DBI_fetch_row($result))
- $tableProperties[] = new TableProperty($row);
- foreach ($tableProperties as $tablePropertie)
- {
- if ($tablePropertie->isPK())
- $lines[] = $tablePropertie->format("
<id name=\"#ucfirstName#\" type=\"#dotNetObjectType#\"
unsaved-value=\"0\">\n <column name=\"#name#\"
sql-type=\"#type#\" not-null=\"#notNull#\" unique=\"#unique#\"
index=\"PRIMARY\"/>\n <generator class=\"native\" />\n
</id>");
- else
- $lines[] = $tablePropertie->format("
<property name=\"#ucfirstName#\" type=\"#dotNetObjectType#\">\n
<column name=\"#name#\" sql-type=\"#type#\" not-null=\"#notNull#\"
#indexName#/>\n </property>");
- }
- PMA_DBI_free_result($result);
- }
- $lines[]=" </class>";
- $lines[]="</hibernate-mapping>";
- return implode("\n", $lines);
- }
+ function handleNHibernateCSBody($db, $table, $crlf)
+ {
+ $lines=array();
+ $result=PMA_DBI_query(sprintf("DESC %s.%s", PMA_backquote($db),
PMA_backquote($table)));
+ if ($result)
+ {
+ $tableProperties=array();
+ while ($row = PMA_DBI_fetch_row($result))
+ $tableProperties[] = new TableProperty($row);
+ $lines[] = "using System;";
+ $lines[] = "using System.Collections;";
+ $lines[] = "using System.Collections.Generic;";
+ $lines[] = "using System.Text;";
+ $lines[] = "namespace ".cgMakeIdentifier($db);
+ $lines[] = "{";
+ $lines[] = " #region ".cgMakeIdentifier($table);
+ $lines[] = " public class ".cgMakeIdentifier($table);
+ $lines[] = " {";
+ $lines[] = " #region Member Variables";
+ foreach ($tableProperties as $tablePropertie)
+ $lines[] = $tablePropertie->formatCs(" protected
#dotNetPrimitiveType# _#name#;");
+ $lines[] = " #endregion";
+ $lines[] = " #region Constructors";
+ $lines[] = " public ".cgMakeIdentifier($table)."() {
}";
+ $temp = array();
+ foreach ($tableProperties as $tablePropertie)
+ if (! $tablePropertie->isPK())
+ $temp[] = $tablePropertie->formatCs("#dotNetPrimitiveType#
#name#");
+ $lines[] = " public
".cgMakeIdentifier($table)."(".implode(", ", $temp).")";
+ $lines[] = " {";
+ foreach ($tableProperties as $tablePropertie)
+ if (! $tablePropertie->isPK())
+ $lines[] = $tablePropertie->formatCs("
this._#name#=#name#;");
+ $lines[] = " }";
+ $lines[] = " #endregion";
+ $lines[] = " #region Public Properties";
+ foreach ($tableProperties as $tablePropertie)
+ $lines[] = $tablePropertie->formatCs(" public virtual
#dotNetPrimitiveType# #ucfirstName#\n {\n get
{return _#name#;}\n set {_#name#=value;}\n }");
+ $lines[] = " #endregion";
+ $lines[] = " }";
+ $lines[] = " #endregion";
+ $lines[] = "}";
+ PMA_DBI_free_result($result);
+ }
+ return implode("\n", $lines);
+ }
- function cgGetOption($optionName)
- {
- global $what;
- return $GLOBALS[$what . "_" . $optionName];
- }
+ function handleNHibernateXMLBody($db, $table, $crlf)
+ {
+ $lines=array();
+ $lines[] = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
+ $lines[] = "<hibernate-mapping xmlns=\"urn:nhibernate-mapping-2.2\"
namespace=\"".cgMakeIdentifier($db)."\"
assembly=\"".cgMakeIdentifier($db)."\">";
+ $lines[] = " <class name=\"".cgMakeIdentifier($table)."\"
table=\"".cgMakeIdentifier($table)."\">";
+ $result = PMA_DBI_query(sprintf("DESC %s.%s", PMA_backquote($db),
PMA_backquote($table)));
+ if ($result)
+ {
+ $tableProperties = array();
+ while ($row = PMA_DBI_fetch_row($result))
+ $tableProperties[] = new TableProperty($row);
+ foreach ($tableProperties as $tablePropertie)
+ {
+ if ($tablePropertie->isPK())
+ $lines[] = $tablePropertie->formatXml(" <id
name=\"#ucfirstName#\" type=\"#dotNetObjectType#\" unsaved-value=\"0\">\n
<column name=\"#name#\" sql-type=\"#type#\" not-null=\"#notNull#\"
unique=\"#unique#\" index=\"PRIMARY\"/>\n <generator
class=\"native\" />\n </id>");
+ else
+ $lines[] = $tablePropertie->formatXml("
<property name=\"#ucfirstName#\" type=\"#dotNetObjectType#\">\n
<column name=\"#name#\" sql-type=\"#type#\" not-null=\"#notNull#\"
#indexName#/>\n </property>");
+ }
+ PMA_DBI_free_result($result);
+ }
+ $lines[]=" </class>";
+ $lines[]="</hibernate-mapping>";
+ return implode("\n", $lines);
+ }
+
+ function cgGetOption($optionName)
+ {
+ global $what;
+ return $GLOBALS[$what . "_" . $optionName];
+ }
}
?>
diff --git a/libraries/export/latex.php b/libraries/export/latex.php
index 96be536..0742109 100644
--- a/libraries/export/latex.php
+++ b/libraries/export/latex.php
@@ -316,9 +316,6 @@ function PMA_exportStructure($db, $table, $crlf,
$error_url, $do_relation = fals
* Gets fields properties
*/
PMA_DBI_select_db($db);
- $local_query = 'SHOW FIELDS FROM ' . PMA_backquote($db) . '.' .
PMA_backquote($table);
- $result = PMA_DBI_query($local_query);
- $fields_cnt = PMA_DBI_num_rows($result);
// Check if we can use Relations
if ($do_relation && !empty($cfgRelation['relation'])) {
@@ -374,8 +371,6 @@ function PMA_exportStructure($db, $table, $crlf,
$error_url, $do_relation = fals
$mime_map = PMA_getMIME($db, $table, true);
}
- $local_buffer = PMA_texEscape($table);
-
// Table caption for first page and label
if (isset($GLOBALS['latex_caption'])) {
$buffer .= ' \\caption{'.
PMA_expandUserString($GLOBALS['latex_structure_caption'], 'PMA_texEscape',
array('table' => $table, 'database' => $db))
@@ -394,8 +389,8 @@ function PMA_exportStructure($db, $table, $crlf,
$error_url, $do_relation = fals
return false;
}
- while ($row = PMA_DBI_fetch_assoc($result)) {
-
+ $fields = PMA_DBI_get_columns($db, $table);
+ foreach ($fields as $row) {
$type = $row['Type'];
// reformat mysql query output
// set or enum types: slashes single quotes inside options
@@ -424,8 +419,6 @@ function PMA_exportStructure($db, $table, $crlf,
$error_url, $do_relation = fals
if ($row['Null'] != 'NO') {
$row['Default'] = 'NULL';
}
- } else {
- $row['Default'] = $row['Default'];
}
$field_name = $row['Field'];
@@ -468,7 +461,6 @@ function PMA_exportStructure($db, $table, $crlf,
$error_url, $do_relation = fals
return false;
}
} // end while
- PMA_DBI_free_result($result);
$buffer = ' \\end{longtable}' . $crlf;
return PMA_exportOutputHandler($buffer);
diff --git a/libraries/export/mediawiki.php b/libraries/export/mediawiki.php
index 76c8b2a..7599df9 100644
--- a/libraries/export/mediawiki.php
+++ b/libraries/export/mediawiki.php
@@ -95,18 +95,16 @@ function PMA_exportDBCreate($db) {
* @access public
*/
function PMA_exportData($db, $table, $crlf, $error_url, $sql_query) {
- global $mediawiki_export_struct;
- global $mediawiki_export_data;
-
- $result = PMA_DBI_fetch_result("SHOW COLUMNS FROM `" . $db . "`.`" .
$table . "`");
- $row_cnt = count($result);
+ $columns = PMA_DBI_get_columns($db, $table);
+ $columns = array_values($columns);
+ $row_cnt = count($columns);
$output = "{| cellpadding=\"10\" cellspacing=\"0\" border=\"1\"
style=\"text-align:center;\"\n";
$output .= "|+'''" . $table . "'''\n";
$output .= "|- style=\"background:#ffdead;\"\n";
$output .= "! style=\"background:#ffffff\" | \n";
for ($i = 0; $i < $row_cnt; ++$i) {
- $output .= " | " . $result[$i]['Field'];
+ $output .= " | " . $columns[$i]['Field'];
if (($i + 1) != $row_cnt) {
$output .= "\n";
}
@@ -116,7 +114,7 @@ function PMA_exportData($db, $table, $crlf, $error_url,
$sql_query) {
$output .= "|- style=\"background:#f9f9f9;\"\n";
$output .= "! style=\"background:#f2f2f2\" | Type\n";
for ($i = 0; $i < $row_cnt; ++$i) {
- $output .= " | " . $result[$i]['Type'];
+ $output .= " | " . $columns[$i]['Type'];
if (($i + 1) != $row_cnt) {
$output .= "\n";
}
@@ -126,7 +124,7 @@ function PMA_exportData($db, $table, $crlf, $error_url,
$sql_query) {
$output .= "|- style=\"background:#f9f9f9;\"\n";
$output .= "! style=\"background:#f2f2f2\" | Null\n";
for ($i = 0; $i < $row_cnt; ++$i) {
- $output .= " | " . $result[$i]['Null'];
+ $output .= " | " . $columns[$i]['Null'];
if (($i + 1) != $row_cnt) {
$output .= "\n";
}
@@ -136,7 +134,7 @@ function PMA_exportData($db, $table, $crlf, $error_url,
$sql_query) {
$output .= "|- style=\"background:#f9f9f9;\"\n";
$output .= "! style=\"background:#f2f2f2\" | Default\n";
for ($i = 0; $i < $row_cnt; ++$i) {
- $output .= " | " . $result[$i]['Default'];
+ $output .= " | " . $columns[$i]['Default'];
if (($i + 1) != $row_cnt) {
$output .= "\n";
}
@@ -146,7 +144,7 @@ function PMA_exportData($db, $table, $crlf, $error_url,
$sql_query) {
$output .= "|- style=\"background:#f9f9f9;\"\n";
$output .= "! style=\"background:#f2f2f2\" | Extra\n";
for ($i = 0; $i < $row_cnt; ++$i) {
- $output .= " | " . $result[$i]['Extra'];
+ $output .= " | " . $columns[$i]['Extra'];
if (($i + 1) != $row_cnt) {
$output .= "\n";
}
hooks/post-receive
--
phpMyAdmin
------------------------------------------------------------------------------
AppSumo Presents a FREE Video for the SourceForge Community by Eric
Ries, the creator of the Lean Startup Methodology on "Lean Startup
Secrets Revealed." This video shows you how to validate your ideas,
optimize your ideas and identify your business strategy.
http://p.sf.net/sfu/appsumosfdev2dev
_______________________________________________
Phpmyadmin-git mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/phpmyadmin-git