aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/db/tools.php
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2014-02-02 16:34:55 +0100
committerNils Adermann <naderman@naderman.de>2014-02-02 16:34:55 +0100
commit38af79dd30f87c3016a2f85d3343bb5f9bb5de7c (patch)
tree2447c1f35c2eedfcaa1b60c9c151d3df61e027fb /phpBB/phpbb/db/tools.php
parent8a6b961c54ea117ada9a85044840975d050c91b7 (diff)
parenta59d6e94a5bc30e99be5535632ccf2046817dd30 (diff)
downloadforums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.tar
forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.tar.gz
forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.tar.bz2
forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.tar.xz
forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.zip
Merge remote-tracking branch 'github-nickvergessen/ticket/11201' into develop
* github-nickvergessen/ticket/11201: (50 commits) [ticket/11201] Remove empty calls section from .yml [ticket/11201] Split template file into multiple files [ticket/11201] Remove dependency from types on the manager [ticket/11201] Rename profilefields class to manager [ticket/11201] Fix parameter description [ticket/11201] Use !== null, its faster [ticket/11201] Also translate profile fields in UCP and ACP [ticket/11201] Add parameters and variables to profile field class [ticket/11201] Add commas on last array entry [ticket/11201] Allow translation of profile field name and explanation [ticket/11201] Fix some variable names [ticket/11201] Add tables to constructor in tests [ticket/11201] Add a method to return the translated full name of the type [ticket/11201] Remove db depending code from field class [ticket/11201] Add variables to classes and add constructor doc blocks [ticket/11201] Update copyright in class file [ticket/11201] Add visibility and remove unused variable [ticket/11201] Add some commas at the last array entry [ticket/11201] Cast some variables to integer [ticket/11201] Inject table names rather then using constants ... Conflicts: phpBB/config/services.yml
Diffstat (limited to 'phpBB/phpbb/db/tools.php')
-rw-r--r--phpBB/phpbb/db/tools.php106
1 files changed, 60 insertions, 46 deletions
diff --git a/phpBB/phpbb/db/tools.php b/phpBB/phpbb/db/tools.php
index 4360c89ac3..65098b643b 100644
--- a/phpBB/phpbb/db/tools.php
+++ b/phpBB/phpbb/db/tools.php
@@ -1474,52 +1474,7 @@ class tools
}
// Get type
- if (strpos($column_data[0], ':') !== false)
- {
- list($orig_column_type, $column_length) = explode(':', $column_data[0]);
- if (!is_array($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']))
- {
- $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'], $column_length);
- }
- else
- {
- if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule']))
- {
- switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][0])
- {
- case 'div':
- $column_length /= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][1];
- $column_length = ceil($column_length);
- $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length);
- break;
- }
- }
-
- if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit']))
- {
- switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][0])
- {
- case 'mult':
- $column_length *= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][1];
- if ($column_length > $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][2])
- {
- $column_type = $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][3];
- }
- else
- {
- $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length);
- }
- break;
- }
- }
- }
- $orig_column_type .= ':';
- }
- else
- {
- $orig_column_type = $column_data[0];
- $column_type = $this->dbms_type_map[$this->sql_layer][$column_data[0]];
- }
+ list($column_type, $orig_column_type) = $this->get_column_type($column_data[0]);
// Adjust default value if db-dependent specified
if (is_array($column_data[1]))
@@ -1695,6 +1650,65 @@ class tools
}
/**
+ * Get the column's database type from the type map
+ *
+ * @param string $column_map_type
+ * @return array column type for this database
+ * and map type without length
+ */
+ function get_column_type($column_map_type)
+ {
+ if (strpos($column_map_type, ':') !== false)
+ {
+ list($orig_column_type, $column_length) = explode(':', $column_map_type);
+ if (!is_array($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']))
+ {
+ $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'], $column_length);
+ }
+ else
+ {
+ if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule']))
+ {
+ switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][0])
+ {
+ case 'div':
+ $column_length /= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][1];
+ $column_length = ceil($column_length);
+ $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length);
+ break;
+ }
+ }
+
+ if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit']))
+ {
+ switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][0])
+ {
+ case 'mult':
+ $column_length *= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][1];
+ if ($column_length > $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][2])
+ {
+ $column_type = $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][3];
+ }
+ else
+ {
+ $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length);
+ }
+ break;
+ }
+ }
+ }
+ $orig_column_type .= ':';
+ }
+ else
+ {
+ $orig_column_type = $column_map_type;
+ $column_type = $this->dbms_type_map[$this->sql_layer][$column_map_type];
+ }
+
+ return array($column_type, $orig_column_type);
+ }
+
+ /**
* Add new column
*/
function sql_column_add($table_name, $column_name, $column_data, $inline = false)