Index: branches/5.1.x/core/kernel/utility/unit_config_reader.php
===================================================================
diff -u -N -r13956 -r13962
--- branches/5.1.x/core/kernel/utility/unit_config_reader.php (.../unit_config_reader.php) (revision 13956)
+++ branches/5.1.x/core/kernel/utility/unit_config_reader.php (.../unit_config_reader.php) (revision 13962)
@@ -1,6 +1,6 @@
'Field %s is described as NOT NULL in config, but does not have DEFAULT value',
'not_null_error3' => 'Field %s is described as NOT NULL in config, but is NULL in db',
'invalid_default' => 'Default value for field %s%s not sync. to db (in config = %s, in db = %s)',
+ 'date_column_not_null_error' => 'Field %s must be NULL in config and database, since it contains date',
+ 'user_column_default_error' => 'Field %s must be have NULL as default value, since it holds user id',
'type_missing' => 'Type definition for field %s missing in config',
+ 'virtual_type_missing' => 'Type definition for virtual field %s missing in config',
+ 'virtual_default_missing' => 'Default value for virtual field %s not set in config',
+ 'virtual_not_null_error' => 'Virtual field %s cannot be not null, since it doesn\'t exist in database',
'invalid_calculated_field' => 'Calculated field %s is missing corresponding virtual field',
);
@@ -670,6 +675,7 @@
$default_missing = false;
$options = $config['Fields'][$f_name];
$not_null = isset($options['not_null']) && $options['not_null'];
+ $formatter = array_key_exists('formatter', $options) ? $options['formatter'] : false;
if (!array_key_exists('default', $options)) {
$config_errors[] = sprintf($error_messages['default_missing'], $f_name);
@@ -689,11 +695,24 @@
$config_errors[] = sprintf($error_messages['not_null_error3'], $f_name);
}
+ if (($formatter == 'kDateFormatter') && $not_null) {
+ $config_errors[] = sprintf($error_messages['date_column_not_null_error'], $f_name);
+ }
+
+ // columns, holding userid should have NULL as default value
+ if (array_key_exists('type', $options) && !$default_missing) {
+ // both type and default value set
+
+ if (preg_match('/ById$/', $f_name) && $options['default'] !== null) {
+ $config_errors[] = sprintf($error_messages['user_column_default_error'], $f_name);
+ }
+ }
+
if (!array_key_exists('type', $options)) {
$config_errors[] = sprintf($error_messages['type_missing'], $f_name);
}
- if (!$default_missing) {
+ if (!$default_missing && ($field['Type'] != 'text')) {
if ( is_null($db_default) && $not_null ) {
$db_default = $options['type'] == 'string' ? '' : 0;
}
@@ -709,6 +728,23 @@
}
}
+ // validate virtual fields
+ if ( array_key_exists('VirtualFields', $config) ) {
+ foreach ($config['VirtualFields'] as $f_name => $options) {
+ if (!array_key_exists('type', $options)) {
+ $config_errors[] = sprintf($error_messages['virtual_type_missing'], $f_name);
+ }
+
+ if (array_key_exists('not_null', $options)) {
+ $config_errors[] = sprintf($error_messages['virtual_not_null_error'], $f_name);
+ }
+
+ if (!array_key_exists('default', $options)) {
+ $config_errors[] = sprintf($error_messages['virtual_default_missing'], $f_name);
+ }
+ }
+ }
+
// validate calculated fields
if ( array_key_exists('CalculatedFields', $config) ) {
foreach ($config['CalculatedFields'] as $special => $calculated_fields) {
@@ -718,6 +754,8 @@
}
}
}
+
+ $config_errors = array_unique($config_errors);
}
if ($config_errors) {