Newer
Older
/**
* Implementation of hook_install().
*/
Jonathan Chaffer
committed
function number_update_1() {
$ret = array();
Jonathan Chaffer
committed
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
switch ($GLOBALS['db_type']) {
case 'pgsql':
db_add_column($ret, 'node_field_float_data', 'nid', 'integer', array('not null' => TRUE, 'default' => 0));
db_add_column($ret, 'node_field_int_data', 'nid', 'integer', array('not null' => TRUE, 'default' => 0));
break;
case 'mysql':
case 'mysqli':
$ret[] = update_sql("ALTER TABLE {node_field_float_data} ADD COLUMN nid int(10) NOT NULL DEFAULT 0");
$ret[] = update_sql("ALTER TABLE {node_field_int_data} ADD COLUMN nid int(10) NOT NULL DEFAULT 0");
break;
}
return $ret;
}
function number_update_2() {
// Multi-part update
if (!isset($_SESSION['number_update_2'])) {
$_SESSION['number_update_2'] = 0;
$_SESSION['number_update_2_max'] = db_result(db_query("SELECT COUNT(*) FROM {node_field_float_data}"));;
}
$limit = 20;
$result = db_query_range("SELECT nr.nid, nffd.vid, nffd.field_name, nffd.delta FROM {node_field_float_data} nffd LEFT JOIN {node_revisions} nr ON nr.vid = nffd.vid", $_SESSION['number_update_2'], $limit);
if (db_num_rows($result) == 0) {
unset($_SESSION['number_update_2']);
unset($_SESSION['number_update_2_max']);
return array();
}
while ($data = db_fetch_object($result)) {
$_SESSION['number_update_2']++;
db_query("UPDATE {node_field_float_data} SET nid = %d WHERE vid = %d AND field_name = '%s' AND delta = %d", $data->nid, $data->vid, $data->field_name, $data->delta);
}
return array('#finished' => $_SESSION['number_update_2'] / $_SESSION['number_update_2_max']);
}
function number_update_3() {
// Multi-part update
if (!isset($_SESSION['number_update_3'])) {
$_SESSION['number_update_3'] = 0;
$_SESSION['number_update_3_max'] = db_result(db_query("SELECT COUNT(*) FROM {node_field_int_data}"));;
}
$limit = 20;
$result = db_query_range("SELECT nr.nid, nfid.vid, nfid.field_name, nfid.delta FROM {node_field_int_data} nfid LEFT JOIN {node_revisions} nr ON nr.vid = nfid.vid", $_SESSION['number_update_3'], $limit);
if (db_num_rows($result) == 0) {
unset($_SESSION['number_update_3']);
unset($_SESSION['number_update_3_max']);
return array();
}
while ($data = db_fetch_object($result)) {
$_SESSION['number_update_3']++;
db_query("UPDATE {node_field_int_data} SET nid = %d WHERE vid = %d AND field_name = '%s' AND delta = %d", $data->nid, $data->vid, $data->field_name, $data->delta);
}
return array('#finished' => $_SESSION['number_update_3'] / $_SESSION['number_update_3_max']);
}
/**
* Data is now stored in per-field tables.
*/
function number_update_4() {
$ret = array();
include_once('./'. drupal_get_path('module', 'content') .'/content.module');
include_once('./'. drupal_get_path('module', 'content') .'/content_admin.inc');
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
foreach ($fields as $field) {
switch ($field['type']) {
case 'number_integer':
$columns = array(
'value' => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
);
content_alter_db_field(array(), array(), $field, $columns);
if ($field['multiple']) {
$ret[] = update_sql('INSERT INTO {node_data_'. $field['field_name'] .'} (vid, delta, nid, '. $field['field_name'] ."_value) SELECT vid, delta, nid, field_int FROM {node_field_int_data} WHERE field_name = '". $field['field_name'] ."'");
}
else {
$ret[] = update_sql('INSERT INTO {node_data_'. $field['field_name'] .'} (vid, nid, '. $field['field_name'] ."_value) SELECT vid, nid, field_int FROM {node_field_int_data} WHERE field_name = '". $field['field_name'] ."'");
}
break;
case 'number_decimal':
$columns = array(
'value' => array('type' => 'float', 'not null' => TRUE, 'default' => 0),
);
content_alter_db_field(array(), array(), $field, $columns);
if ($field['multiple']) {
$ret[] = update_sql('INSERT INTO {node_data_'. $field['field_name'] .'} (vid, delta, nid, '. $field['field_name'] ."_value) SELECT vid, delta, nid, field_float FROM {node_field_float_data} WHERE field_name = '". $field['field_name'] ."'");
}
else {
$ret[] = update_sql('INSERT INTO {node_data_'. $field['field_name'] .'} (vid, nid, '. $field['field_name'] ."_value) SELECT vid, nid, field_float FROM {node_field_float_data} WHERE field_name = '". $field['field_name'] ."'");
}
break;
}
}
$ret[] = update_sql('DROP TABLE {node_field_int_data}');
$ret[] = update_sql('DROP TABLE {node_field_float_data}');
db_query('DELETE FROM {cache}');
return $ret;
}
Yves Chedemois
committed
/**
* Set the value columns to accept NULL values
*/
function number_update_5() {
$ret = array();
include_once('./'. drupal_get_path('module', 'content') .'/content.module');
include_once('./'. drupal_get_path('module', 'content') .'/content_admin.inc');
Yves Chedemois
committed
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
$fields = content_fields();
foreach ($fields as $field) {
switch ($field['type']) {
case 'number_integer':
case 'number_decimal':
$db_info = content_database_info($field);
$columns_old = $db_info['columns'];
$columns = $columns_old;
$columns['value']['not null'] = FALSE;
$columns['value']['default'] = NULL;
// force the old values : if the db info was rebuilt before the update is run,
// it will already contain the new values, and nothing gets changed in content_alter_db_field
$columns_old['value']['not null'] = TRUE;
$columns_old['value']['default'] = 0;
content_alter_db_field($field, $columns_old, $field, $columns);
$ret[] = array(
'query' => strtr('The field %field_name has been updated to accept NULL values.', array('%field_name' => $field['field_name'])),
'success' => TRUE
);
break;
}
}
db_query('DELETE FROM {cache}');
return $ret;
}