PageRenderTime 689ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/phpMyAdmin/libraries/data_drizzle.inc.php

https://bitbucket.org/izubizarreta/https-bitbucket.org-bityvip
PHP | 225 lines | 191 code | 19 blank | 15 comment | 6 complexity | 29b58976d1005cbcd9ce51a7133f06fd MD5 | raw file
Possible License(s): LGPL-3.0, LGPL-2.0, JSON, GPL-2.0, BSD-3-Clause, LGPL-2.1, MIT
  1. <?php
  2. /**
  3. * Column types and functions supported by Drizzle
  4. *
  5. * @package PhpMyAdmin
  6. */
  7. $auto_column_types = empty($cfg['ColumnTypes']);
  8. // VARCHAR, TINYINT, TEXT and DATE are listed first, based on estimated popularity
  9. $cfg['ColumnTypes'] = !empty($cfg['ColumnTypes']) ? $cfg['ColumnTypes'] : array(
  10. // most used
  11. 'INTEGER',
  12. 'VARCHAR',
  13. 'TEXT',
  14. 'DATE',
  15. // numeric
  16. 'NUMERIC' => array(
  17. 'INTEGER',
  18. 'BIGINT',
  19. '-',
  20. 'DECIMAL',
  21. 'DOUBLE',
  22. '-',
  23. 'BOOLEAN',
  24. 'SERIAL',
  25. 'UUID',
  26. ),
  27. // Date/Time
  28. 'DATE and TIME' => array(
  29. 'DATE',
  30. 'DATETIME',
  31. 'TIMESTAMP',
  32. 'TIME',
  33. ),
  34. // Text
  35. 'STRING' => array(
  36. 'VARCHAR',
  37. 'TEXT',
  38. '-',
  39. 'VARBINARY',
  40. 'BLOB',
  41. '-',
  42. 'ENUM',
  43. ),
  44. );
  45. if ($auto_column_types && PMA_MYSQL_INT_VERSION >= 20120130) {
  46. $cfg['ColumnTypes']['STRING'][] = '-';
  47. $cfg['ColumnTypes']['STRING'][] = 'IPV6';
  48. }
  49. unset($auto_column_types);
  50. $cfg['AttributeTypes'] = !empty($cfg['AttributeTypes']) ? $cfg['AttributeTypes'] : array(
  51. '',
  52. 'on update CURRENT_TIMESTAMP',
  53. );
  54. if ($cfg['ShowFunctionFields']) {
  55. $cfg['RestrictColumnTypes'] = !empty($cfg['RestrictColumnTypes']) ? $cfg['RestrictColumnTypes'] : array(
  56. 'INTEGER' => 'FUNC_NUMBER',
  57. 'BIGINT' => 'FUNC_NUMBER',
  58. 'DECIMAL' => 'FUNC_NUMBER',
  59. 'DOUBLE' => 'FUNC_NUMBER',
  60. 'BOOLEAN' => 'FUNC_NUMBER',
  61. 'SERIAL' => 'FUNC_NUMBER',
  62. 'DATE' => 'FUNC_DATE',
  63. 'DATETIME' => 'FUNC_DATE',
  64. 'TIMESTAMP' => 'FUNC_DATE',
  65. 'TIME' => 'FUNC_DATE',
  66. 'VARCHAR' => 'FUNC_CHAR',
  67. 'TEXT' => 'FUNC_CHAR',
  68. 'VARBINARY' => 'FUNC_CHAR',
  69. 'BLOB' => 'FUNC_CHAR',
  70. 'UUID' => 'FUNC_UUID',
  71. 'ENUM' => '',
  72. );
  73. $restrict_functions = array(
  74. 'FUNC_CHAR' => array(
  75. 'BIN',
  76. 'CHAR',
  77. 'CURRENT_USER',
  78. 'COMPRESS',
  79. 'DATABASE',
  80. 'DAYNAME',
  81. 'HEX',
  82. 'LOAD_FILE',
  83. 'LOWER',
  84. 'LTRIM',
  85. 'MD5',
  86. 'MONTHNAME',
  87. 'QUOTE',
  88. 'REVERSE',
  89. 'RTRIM',
  90. 'SCHEMA',
  91. 'SPACE',
  92. 'TRIM',
  93. 'UNCOMPRESS',
  94. 'UNHEX',
  95. 'UPPER',
  96. 'USER',
  97. 'UUID',
  98. 'VERSION',
  99. ),
  100. 'FUNC_UUID' => array(
  101. 'UUID',
  102. ),
  103. 'FUNC_DATE' => array(
  104. 'CURRENT_DATE',
  105. 'CURRENT_TIME',
  106. 'DATE',
  107. 'FROM_DAYS',
  108. 'FROM_UNIXTIME',
  109. 'LAST_DAY',
  110. 'NOW',
  111. 'SYSDATE',
  112. //'TIME', // https://bugs.launchpad.net/drizzle/+bug/804571
  113. 'TIMESTAMP',
  114. 'UTC_DATE',
  115. 'UTC_TIME',
  116. 'UTC_TIMESTAMP',
  117. 'YEAR',
  118. ),
  119. 'FUNC_NUMBER' => array(
  120. 'ABS',
  121. 'ACOS',
  122. 'ASCII',
  123. 'ASIN',
  124. 'ATAN',
  125. 'BIT_COUNT',
  126. 'CEILING',
  127. 'CHAR_LENGTH',
  128. 'CONNECTION_ID',
  129. 'COS',
  130. 'COT',
  131. 'CRC32',
  132. 'DAYOFMONTH',
  133. 'DAYOFWEEK',
  134. 'DAYOFYEAR',
  135. 'DEGREES',
  136. 'EXP',
  137. 'FLOOR',
  138. 'HOUR',
  139. 'LENGTH',
  140. 'LN',
  141. 'LOG',
  142. 'LOG2',
  143. 'LOG10',
  144. 'MICROSECOND',
  145. 'MINUTE',
  146. 'MONTH',
  147. 'OCT',
  148. 'ORD',
  149. 'PI',
  150. 'QUARTER',
  151. 'RADIANS',
  152. 'RAND',
  153. 'ROUND',
  154. 'SECOND',
  155. 'SIGN',
  156. 'SIN',
  157. 'SQRT',
  158. 'TAN',
  159. 'TO_DAYS',
  160. 'TIME_TO_SEC',
  161. 'UNCOMPRESSED_LENGTH',
  162. 'UNIX_TIMESTAMP',
  163. //'WEEK', // same as TIME
  164. 'WEEKDAY',
  165. 'WEEKOFYEAR',
  166. 'YEARWEEK',
  167. ),
  168. );
  169. $cfg_default_restrict_funcs = empty($cfg['RestrictFunctions']);
  170. if ($cfg_default_restrict_funcs) {
  171. $cfg['RestrictFunctions'] = $restrict_functions;
  172. }
  173. if (empty($cfg['Functions'])) {
  174. // build a list of functions based on $restrict_functions
  175. $cfg['Functions'] = array();
  176. foreach ($restrict_functions as $cat => $functions) {
  177. $cfg['Functions'] = array_merge($cfg['Functions'], $functions);
  178. }
  179. // check for some functions known to be in modules
  180. $functions = array(
  181. 'MYSQL_PASSWORD' => 'FUNC_CHAR',
  182. 'ROT13' => 'FUNC_CHAR',
  183. );
  184. // add new functions
  185. $sql = "SELECT upper(plugin_name) f
  186. FROM data_dictionary.plugins
  187. WHERE plugin_name IN ('" . implode("','", array_keys($functions)) . "')
  188. AND plugin_type = 'Function'
  189. AND is_active";
  190. $drizzle_functions = PMA_DBI_fetch_result($sql, 'f', 'f');
  191. $cfg['Functions'] = array_merge($cfg['Functions'], $drizzle_functions);
  192. if ($cfg_default_restrict_funcs) {
  193. foreach ($drizzle_functions as $function) {
  194. $category = $functions[$function];
  195. $cfg['RestrictFunctions'][$category][] = $function;
  196. }
  197. foreach ($cfg['RestrictFunctions'] as &$v) {
  198. sort($v);
  199. }
  200. unset($v);
  201. }
  202. sort($cfg['Functions']);
  203. }
  204. unset($restrict_functions);
  205. } // end if
  206. ?>