1
|
<?php
|
2
|
/**
|
3
|
* @file
|
4
|
* Install, update and uninstall functions for the computed field module.
|
5
|
*/
|
6
|
|
7
|
/**
|
8
|
* Implements hook_field_schema().
|
9
|
*/
|
10
|
function computed_field_field_schema($field) {
|
11
|
if ($field['type'] == 'computed') {
|
12
|
$settings = $field['settings'];
|
13
|
|
14
|
if ($settings['store']) {
|
15
|
$columns = array('value' => array());
|
16
|
|
17
|
// Hardcoded 'longtext' settings.
|
18
|
if ($settings['database']['data_type'] == 'longtext') {
|
19
|
$columns['value']['type'] = 'text';
|
20
|
$columns['value']['size'] = 'big';
|
21
|
}
|
22
|
else {
|
23
|
$columns['value']['type'] = isset($settings['database']['data_type']) ? $settings['database']['data_type'] : 'varchar';
|
24
|
}
|
25
|
// 'text' and 'varchar' fields get length settings.
|
26
|
if ($settings['database']['data_type'] == 'text' || $settings['database']['data_type'] == 'varchar') {
|
27
|
$columns['value']['length'] = isset($settings['database']['data_length']) ? $settings['database']['data_length'] : 32;
|
28
|
}
|
29
|
// 'int' and 'float' fields get size settings.
|
30
|
if ($settings['database']['data_type'] == 'int' || $settings['database']['data_type'] == 'float') {
|
31
|
$columns['value']['size'] = isset($settings['database']['data_size']) ? $settings['database']['data_size'] : 'normal';
|
32
|
}
|
33
|
// 'decimal' fields get precision and scale settings.
|
34
|
if ($settings['database']['data_type'] == 'numeric') {
|
35
|
$columns['value']['precision'] = isset($settings['database']['data_precision']) ? $settings['database']['data_precision'] : 10;
|
36
|
$columns['value']['scale'] = isset($settings['database']['data_scale']) ? $settings['database']['data_scale'] : 2;
|
37
|
}
|
38
|
// Add 'not null' settings.
|
39
|
$columns['value']['not null'] = isset($settings['database']['data_not_NULL']) ? $settings['database']['data_not_NULL'] : TRUE;
|
40
|
// Add default values if set.
|
41
|
if ($settings['database']['data_default'] !== '') {
|
42
|
$columns['value']['default'] = $settings['database']['data_default'];
|
43
|
}
|
44
|
// Add a simple index on the data if requested (except 'text' fields).
|
45
|
if ($settings['database']['data_index'] && $columns['value']['type'] != 'text') {
|
46
|
$indexes = array('value' => array('value'));
|
47
|
}
|
48
|
}
|
49
|
}
|
50
|
|
51
|
if (isset($columns) && isset($indexes)) {
|
52
|
return array(
|
53
|
'columns' => $columns,
|
54
|
'indexes' => $indexes,
|
55
|
);
|
56
|
}
|
57
|
elseif (isset($columns)) {
|
58
|
return array(
|
59
|
'columns' => $columns,
|
60
|
);
|
61
|
}
|
62
|
return;
|
63
|
}
|