-
Notifications
You must be signed in to change notification settings - Fork 0
/
devel_sqlmode.module
105 lines (99 loc) · 3.01 KB
/
devel_sqlmode.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
/**
* @file
* Switch the SQL mode of MySQL.
*/
/**
* Implements hook_config_info();
*/
function devel_sqlmode_config_info() {
$prefixes = array();
$prefixes['devel_sqlmode.settings'] = array(
'group' => t('Configuration'),
'label' => t('SQL mode switcher settings'),
);
return $prefixes;
}
/**
* Implements hook_menu().
*/
function devel_sqlmode_menu() {
$items['admin/config/development/devel_sqlmode'] = array(
'title' => 'SQL mode switcher',
'description' => 'Change the SQL mode of MySQL. Modes define what SQL syntax MySQL should support and what kind of data validation checks it should perform. This makes it easier to prototype compatibility with other database platforms like PostgreSQL, MSSQL, or Oracle.',
'page callback' => 'backdrop_get_form',
'page arguments' => array('devel_sqlmode_admin_settings'),
'access arguments' => array('administer site configuration')
);
return $items;
}
function devel_sqlmode_admin_settings() {
$form = array();
// http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html
$sql_modes = backdrop_map_assoc(
array(
'ANSI',
'STRICT_TRANS_TABLES',
'TRADITIONAL',
'ALLOW_INVALID_DATES',
'ANSI_QUOTES',
'ERROR_FOR_DIVISION_BY_ZERO',
'HIGH_NOT_PRECEDENCE',
'IGNORE_SPACE',
'NO_AUTO_CREATE_USER',
'NO_AUTO_VALUE_ON_ZERO',
'NO_BACKSLASH_ESCAPES ',
'NO_DIR_IN_CREATE',
'NO_ENGINE_SUBSTITUTION',
'NO_FIELD_OPTIONS',
'NO_KEY_OPTIONS',
'NO_TABLE_OPTIONS',
'NO_UNSIGNED_SUBTRACTION',
'NO_ZERO_DATE',
'NO_ZERO_IN_DATE',
'ONLY_FULL_GROUP_BY',
'PAD_CHAR_TO_FULL_LENGTH',
'PIPES_AS_CONCAT',
'REAL_AS_FLOAT',
'STRICT_ALL_TABLES',
'DB2',
'MAXDB',
'MSSQL',
'MYSQL323',
'MYSQL40',
'ORACLE',
'POSTGRESQL'
)
);
asort($sql_modes, SORT_STRING);
$form['devel_sqlmode'] = array(
'#type' => 'checkboxes',
'#title' => t('SQL modes to enable'),
'#options' => $sql_modes,
'#default_value' => config_get('devel_sqlmode.settings', 'devel_sqlmode'),
'#description' => t('Listed modes are supported by !link.', array('!link' => l('MySQL 5.5', 'http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html'))),
);
$form['#submit'][] = 'devel_sqlmode_admin_settings_submit';
$form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
return $form;
}
function devel_sqlmode_admin_settings_submit($form_id, $form_state) {
$sql_modes = array();
while (list($key, $value) = each($form_state['values']['devel_sqlmode'])) {
if (!strcmp($key, $value)) {
$sql_modes[] = $value;
}
}
config('devel_sqlmode.settings')
->set('devel_sqlmode', $sql_modes)
->save();
}
/**
* Implements hook_boot().
*/
function devel_sqlmode_boot() {
$sql_modes = implode(',', config_get('devel_sqlmode.settings', 'devel_sqlmode'));
if (!empty($sql_modes)) {
db_query("SET SESSION sql_mode = :sql_modes", array(':sql_modes' => $sql_modes));
}
}