MXS-1216: Add real_type and length to cdc_schema.py
The schema generator program needs to add the real_type and length fields if the data types define them. Also fixed a bug where the real_type and length fields were checked for generated fields.
This commit is contained in:
@ -33,7 +33,15 @@ opts = parser.parse_args(sys.argv[1:])
|
|||||||
|
|
||||||
def parse_field(row):
|
def parse_field(row):
|
||||||
res = dict()
|
res = dict()
|
||||||
name = row[1].lower().split('(')[0]
|
parts = row[1].lower().split('(')
|
||||||
|
name = parts[0]
|
||||||
|
|
||||||
|
res["real_type"] = name
|
||||||
|
|
||||||
|
if len(parts) > 1:
|
||||||
|
res["length"] = int(parts[1].split(')')[0])
|
||||||
|
else:
|
||||||
|
res["length"] = -1
|
||||||
|
|
||||||
if name in ("date", "datetime", "time", "timestamp", "year", "tinytext", "text",
|
if name in ("date", "datetime", "time", "timestamp", "year", "tinytext", "text",
|
||||||
"mediumtext", "longtext", "char", "varchar", "enum", "set"):
|
"mediumtext", "longtext", "char", "varchar", "enum", "set"):
|
||||||
|
@ -190,35 +190,41 @@ bool json_extract_field_names(const char* filename, TABLE_CREATE *table)
|
|||||||
|
|
||||||
if (json_is_object(val))
|
if (json_is_object(val))
|
||||||
{
|
{
|
||||||
json_t* value;
|
|
||||||
|
|
||||||
if ((value = json_object_get(val, "real_type")) && json_is_string(value))
|
|
||||||
{
|
|
||||||
table->column_types[columns] = strdup(json_string_value(value));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
table->column_types[columns] = strdup("unknown");
|
|
||||||
MXS_WARNING("No \"real_type\" value defined. Treating as unknown type field.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((value = json_object_get(val, "length")) && json_is_integer(value))
|
|
||||||
{
|
|
||||||
table->column_lengths[columns] = json_integer_value(value);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
table->column_lengths[columns] = -1;
|
|
||||||
MXS_WARNING("No \"length\" value defined. Treating as default length field.");
|
|
||||||
}
|
|
||||||
|
|
||||||
json_t *name = json_object_get(val, "name");
|
json_t *name = json_object_get(val, "name");
|
||||||
|
|
||||||
if (name && json_is_string(name))
|
if (name && json_is_string(name))
|
||||||
{
|
{
|
||||||
const char *name_str = json_string_value(name);
|
const char *name_str = json_string_value(name);
|
||||||
|
|
||||||
if (not_generated_field(name_str))
|
if (not_generated_field(name_str))
|
||||||
{
|
{
|
||||||
table->column_names[columns++] = strdup(name_str);
|
table->column_names[columns] = strdup(name_str);
|
||||||
|
|
||||||
|
json_t* value;
|
||||||
|
|
||||||
|
if ((value = json_object_get(val, "real_type")) && json_is_string(value))
|
||||||
|
{
|
||||||
|
table->column_types[columns] = strdup(json_string_value(value));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
table->column_types[columns] = strdup("unknown");
|
||||||
|
MXS_WARNING("No \"real_type\" value defined. "
|
||||||
|
"Treating as unknown type field.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((value = json_object_get(val, "length")) && json_is_integer(value))
|
||||||
|
{
|
||||||
|
table->column_lengths[columns] = json_integer_value(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
table->column_lengths[columns] = -1;
|
||||||
|
MXS_WARNING("No \"length\" value defined. "
|
||||||
|
"Treating as default length field.");
|
||||||
|
}
|
||||||
|
|
||||||
|
columns++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user