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) {