def build_tbl_message(fobj, table, key_array, field, dt_array): 'build table message' tbl_name = table[0] tbl_name_low = string.lower(table[0]) tbl_name_low_key = tbl_name_low + '_key' global glb_field_index required_str = "required" is_key = 0 bypass = 0 is_repeated = 0 if ('key' == field[1]): is_key = 1 key = key_array[0] dt_type = cdb_util.check_data_dt_type(table, key, dt_array) required_str = "required" if (1 == cdb_util.is_typedef_key(key_array)): key_pb_type = 'compose_' + key_array[0][0] else: key_pb_type = tbl_name_low_key else: is_key = 0 required_str = "optional" if (len(field) > 4): dt_type = field[6] else: dt_type = field[3] if ('FLAGS8' == dt_type[1] or 'FLAGS32' == dt_type[1]): field_name = cdb_util.format_field_name(field[3]) else: field_name = cdb_util.format_field_name(field[1]) pb_type = cdb_util.pb_get_pb_type(dt_type, dt_array) if (2 == len(pb_type)): is_repeated = 1 pb_type = pb_type[1] required_str = "repeated" else: if ('compose' == pb_type): compose_type = dt_type[1] pb_type = 'compose_' + compose_type elif ('none' == pb_type): bypass = 1 elif ('todo' == pb_type): bypass = 1 if (bypass and 0 == is_key): return if (is_key): print >> fobj, " %s %s %s = %d;" % (required_str, key_pb_type, field_name, glb_field_index) else: print >> fobj, " %s %s %s = %d;" % (required_str, pb_type, field_name, glb_field_index) glb_field_index += 1
def gen_format_ds_c_one_field(file_output, ds_param, field): field_type = field[0] field_str = field[1] if (field_str.find('*') == 0): format_field_str = cdb_util.format_field_name(field_str) print >> file_output, " %s->%s = NULL;" % (ds_param, format_field_str) if (field_type.find('REFERLIST_') == 0): format_field_str = cdb_util.format_field_name(field_str) print >> file_output, " %s->%s.obj_list = NULL;" % ( ds_param, format_field_str)
def build_tbl_field_id(fobj, tbl_name, field_array): 'build table field id' print >> fobj, "/* %s field defines */" % (tbl_name) print >> fobj, "typedef enum" print >> fobj, "{" for i, field in enumerate(field_array): if (len(field) > 5): field_name = string.upper(cdb_util.format_field_name(field[3])) access_type = field[5] else: field_name = string.upper(cdb_util.format_field_name(field[1])) access_type = field[2] print >> fobj, " %s_FLD_%-20s = %-2d, /* %s */" % (tbl_name, field_name, i, access_type) print >> fobj, " %s_FLD_%-20s = %-2d" % (tbl_name, 'MAX', i+1) print >> fobj, "} %s_field_id_t;" % (string.lower(tbl_name)) print >> fobj, ""
def build_tbl_key_message(fobj, table, key_array, field, dt_array): 'build table key message' tbl_name = table[0] tbl_name_low = string.lower(table[0]) key = key_array[0] global glb_field_index dt_type = cdb_util.check_data_dt_type(table, key, dt_array) if (1 != len(key_array)): print "%s key num %d" % (tbl_name, len(key_array)) for i, key in enumerate(key_array): bypass = 0 field_name = cdb_util.format_field_name(key[1]) pb_type = cdb_util.pb_get_pb_type(dt_type, dt_array) if (2 == len(pb_type)): bypass = 1 else: if ('compose' == pb_type): compose_type = dt_type[1] compose_type = 'compose_' + compose_type elif ('none' == pb_type): bypass = 1 elif ('todo' == pb_type): bypass = 1 if (bypass): return if ('compose' == pb_type): print >> fobj, " required %s %s = %d;" % (compose_type, field_name, glb_field_index) else: print >> fobj, " required %s %s = %d;" % (pb_type, field_name, glb_field_index) glb_field_index += 1
def build_one_ds_field(fobj, ds, key_array, field_array): 'generate ds field structure' ds_name = ds[0] ds_name_low = string.lower(ds_name) ds_name_field = ds_name_low + '_fields' print >> fobj, "static sdb_field_t %s[] = " % (ds_name_field) print >> fobj, "{" for i, field in enumerate(field_array): if (len(field) > 4): field_name = cdb_util.format_field_name(field[3]) else: field_name = cdb_util.format_field_name(field[1]) field_access_enum = get_field_access_enum(field) [dt_type_type, ds_name] = get_dt_type_type(field) print >> fobj, " { %-15s %-18s %-20s \"%s\" }," % (field_access_enum + ',', dt_type_type + ',', ds_name + ',', field_name) print >> fobj, "};" print >> fobj, ""
def build_one_tbl_field(fobj, table, field_array): 'generate table field structure' tbl_name = table[0] tbl_name_low = string.lower(tbl_name) tbl_name_field = tbl_name_low + '_fields' print >> fobj, "static cdb_field_t %s[] = " % (tbl_name_field) print >> fobj, "{" for i, field in enumerate(field_array): if (len(field) > 4): field_name = cdb_util.format_field_name(field[3]) else: field_name = cdb_util.format_field_name(field[1]) field_access_enum = get_field_access_enum(field) [dt_type_type, ds_name] = get_dt_type_type(field) print >> fobj, " { %-15s %-18s %-20s \"%s\" }," % ( field_access_enum + ',', dt_type_type + ',', ds_name + ',', field_name) print >> fobj, "};" print >> fobj, ""
def get_compose_field_array(fobj, table, key_array, data_array, master_array, field_array, dt_array): compose_array = [] for i, field in enumerate(field_array): tbl_name = table[0] tbl_name_low = string.lower(table[0]) tbl_name_low_key = tbl_name_low + '_key' tbl_value_name = table[1] cdb_paramvalue = 'p_' + tbl_value_name pb_paramvalue = 'p_pb_' + tbl_value_name bypass = 0 key_field_name = "" if ('key' == field[1]): continue if (len(field) > 4): dt_type = field[6] else: dt_type = field[3] if ('FLAGS8' == dt_type[1] or 'FLAGS32' == dt_type[1]): field_name = cdb_util.format_field_name(field[3]) else: field_name = cdb_util.format_field_name(field[1]) if ('static' == field_name): field_name += '_' field_name_low = string.lower(field_name) pb_type = cdb_util.pb_get_pb_type(dt_type, dt_array) if ('compose' == pb_type): compose_type = dt_type[1] compose_item = [] compose_item.append(compose_type) compose_item.append(field_name_low) compose_array.append(compose_item) return compose_array
def build_one_act_field(fobj, act, field_array): 'generate act field structure' act_name = act[0] act_name_low = string.lower(act_name) act_name_field = act_name_low + '_fields' print >> fobj, "static sdb_field_t %s[] = " % (act_name_field) print >> fobj, "{" for i, field in enumerate(field_array): field_name = cdb_util.format_field_name(field[1]) field_access_enum = get_field_access_enum(field) [dt_type_type, ds_name] = ['SDB_DT_NONE', '-1'] print >> fobj, " { %-15s %-18s %-20s \"%s\" }," % (field_access_enum + ',', dt_type_type + ',', ds_name + ',', field_name) print >> fobj, "};" print >> fobj, ""
def gen_func_pb_c_pb_key(fobj, table, key_array, field, dt_array): tbl_name = table[0] tbl_name_low = string.lower(table[0]) tbl_name_low_key = tbl_name_low + '_key' tbl_value_name = table[1] cdb_paramvalue = 'p_' + tbl_value_name pb_paramvalue = 'p_pb_' + tbl_value_name bypass = 0 key_field_name = "" key = key_array[0] dt_type = cdb_util.check_data_dt_type(table, key, dt_array) key_field_name = cdb_util.format_field_name(key[1]) field_name = key_field_name field_name_low = string.lower(field_name) pb_type = cdb_util.pb_get_pb_type(dt_type, dt_array) if ('string' == pb_type): print >> fobj, ' %s->key->%s = XCALLOC(MEM_LIB_PROTOBUF, sal_strlen(%s->key.%s)+1);' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) print >> fobj, ' sal_strcpy(%s->key->%s, %s->key.%s);' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) elif ('uint32' == pb_type): if ('FLAGS8' == dt_type[1] or 'FLAGS32' == dt_type[1]): data_value = field[1] field_value = field[3] flag_value = field[4] print >> fobj, ' %s->key->%s = GLB_FLAG_ISSET(%s->key.%s, %s) ? TRUE : FALSE;' % (pb_paramvalue, field_name_low, cdb_paramvalue, data_value, flag_value) else: print >> fobj, ' %s->key->%s = %s->key.%s;' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) elif ('uint64' == pb_type or 'int32' == pb_type or 'int64' == pb_type or 'double' == pb_type): print >> fobj, ' %s->key->%s = %s->key.%s;' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) elif ('bytes' == pb_type): pass elif ('compose' == pb_type): if (1 == cdb_util.is_typedef_key(key_array)): compose_type = dt_type[1] compose_func = 'pb_compose_' + compose_type + '_to_pb' print >> fobj, ' %s(&%s->key, %s->key);' % (compose_func, cdb_paramvalue, pb_paramvalue) else: compose_type = dt_type[1] compose_func = 'pb_compose_' + compose_type + '_to_pb' compose_refer = cdb_util.pb_get_cdb_compose_reference(compose_type) print >> fobj, ' %s(%s%s->key.%s, %s->key->%s);' % (compose_func, compose_refer, cdb_paramvalue, key_field_name, pb_paramvalue, key_field_name) elif ('none' == pb_type): pass else: pass print >> fobj, ''
def gen_func_pb_c_pb_dump_field(fobj, table, key_array, field, dt_array): tbl_name = table[0] tbl_name_low = string.lower(table[0]) tbl_name_low_key = tbl_name_low + '_key' tbl_value_name = table[1] cdb_paramvalue = 'p_' + tbl_value_name pb_paramvalue = 'p_pb_' + tbl_value_name bypass = 0 key_field_name = "" if ('key' == field[1]): is_key = 1 key = key_array[0] dt_type = cdb_util.check_data_dt_type(table, key, dt_array) key_field_name = cdb_util.format_field_name(key[1]) else: is_key = 0 if (len(field) > 4): dt_type = field[6] else: dt_type = field[3] if ('FLAGS8' == dt_type[1] or 'FLAGS32' == dt_type[1]): field_name = cdb_util.format_field_name(field[3]) else: field_name = cdb_util.format_field_name(field[1]) if (is_key): field_name = field_name + '->' + key_field_name if ('static' == field_name): field_name += '_' field_name_low = string.lower(field_name) pb_type = cdb_util.pb_get_pb_type(dt_type, dt_array) if (2 == len(pb_type)): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=");' % (field_name) pb_type = pb_type[1] is_repeated = 1 if ('string' == pb_type): print >> fobj, ' offset += %s(%s->%s, %s->n_%s, (out + offset));' % ('pb_string_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) elif ('int8' == pb_type): print >> fobj, ' offset += %s(%s->%s, sizeof(%s->%s), (out + offset));' % ('pb_int8_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) elif ('uint8' == pb_type): print >> fobj, ' offset += %s(%s->%s, sizeof(%s->%s), (out + offset));' % ('pb_uint8_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) elif ('int32' == pb_type): print >> fobj, ' offset += %s(%s->%s, sizeof(%s->%s), (out + offset));' % ('pb_int32_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) elif ('uint32' == pb_type): print >> fobj, ' offset += %s(%s->%s, sizeof(%s->%s), (out + offset));' % ('pb_uint32_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) elif ('double' == pb_type): print >> fobj, ' offset += %s(%s->%s, sizeof(%s->%s), (out + offset));' % ('pb_double_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) else: if ('string' == pb_type): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=%s", %s->%s);' % (field_name, "%s", pb_paramvalue, field_name_low) elif ('uint32' == pb_type): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=%s", %s->%s);' % (field_name, "%u", pb_paramvalue, field_name_low) elif ('uint64' == pb_type): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=%%"%s, %s->%s);' % (field_name, "PRIu64", pb_paramvalue, field_name_low) elif ('int32' == pb_type): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=%s", %s->%s);' % (field_name, "%d", pb_paramvalue, field_name_low) elif ('int64' == pb_type): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=%%"%s, %s->%s);' % (field_name, "PRId64", pb_paramvalue, field_name_low) elif ('double' == pb_type): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=%s", %s->%s);' % (field_name, "%f", pb_paramvalue, field_name_low) elif ('bytes' == pb_type): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=");' % (field_name) if ('INT8ARRAY' == dt_type[1]): print >> fobj, ' offset += %s(%s->%s.data, %s->%s.len, (out + offset));' % ('pb_int8_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) elif ('UINT8ARRAY' == dt_type[1]): print >> fobj, ' offset += %s(%s->%s.data, %s->%s.len, (out + offset));' % ('pb_uint8_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) else: print >> fobj, ' offset += %s(%s->%s.data, %s->%s.len, (out + offset));' % ('pb_bitmap_array_dump', pb_paramvalue, field_name_low, pb_paramvalue, field_name_low) elif ('compose' == pb_type): if (is_key): if (1 == cdb_util.is_typedef_key(key_array)): field_name_low = 'key' else: field_name_low = 'key->' + key_field_name compose_type = dt_type[1] compose_func = 'pb_compose_' + compose_type + '_dump' print >> fobj, ' offset += %s(%s->%s, (out + offset));' % (compose_func, pb_paramvalue, field_name_low) elif ('none' == pb_type): pass elif ('todo' == pb_type): print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=todo");' % (field_name) else: print >> fobj, ' offset += sal_sprintf(out + offset, "/%s=unknown");' % (field_name) if (is_key): print >> fobj, ' if (only_key)' print >> fobj, ' {' print >> fobj, ' offset += sal_sprintf(out + offset, "\\n");' print >> fobj, ' return PM_E_NONE;' print >> fobj, ' }' print >> fobj, ' '
def gen_func_pb_c_pb_free_field(fobj, table, key_array, field, dt_array): tbl_name = table[0] tbl_name_low = string.lower(table[0]) tbl_name_low_key = tbl_name_low + '_key' tbl_value_name = table[1] cdb_paramvalue = 'p_' + tbl_value_name pb_paramvalue = 'p_pb_' + tbl_value_name bypass = 0 key_field_name = "" if ('key' == field[1]): is_key = 1 key = key_array[0] dt_type = cdb_util.check_data_dt_type(table, key, dt_array) key_field_name = cdb_util.format_field_name(key[1]) else: is_key = 0 if (len(field) > 4): dt_type = field[6] else: dt_type = field[3] if ('FLAGS8' == dt_type[1] or 'FLAGS32' == dt_type[1]): field_name = cdb_util.format_field_name(field[3]) else: field_name = cdb_util.format_field_name(field[1]) if (is_key): field_name = field_name + '->' + key_field_name if ('static' == field_name): field_name += '_' field_name_low = string.lower(field_name) pb_type = cdb_util.pb_get_pb_type(dt_type, dt_array) if (2 == len(pb_type)): pb_type = pb_type[1] if ('string' == pb_type): print >> fobj, " if (%s->%s)" % (pb_paramvalue, field_name_low) print >> fobj, " {" print >> fobj, " for (i = 0; i < %s->n_%s; i++)" % (pb_paramvalue, field_name_low) print >> fobj, " {" print >> fobj, " if (%s->%s[i])" % (pb_paramvalue, field_name_low) print >> fobj, " {" print >> fobj, " XFREE(MEM_LIB_PROTOBUF, %s->%s[i]);" % (pb_paramvalue, field_name_low) print >> fobj, " %s->%s[i] = NULL;" % (pb_paramvalue, field_name_low) print >> fobj, " }" print >> fobj, " }" print >> fobj, " XFREE(MEM_LIB_PROTOBUF, %s->%s);" % (pb_paramvalue, field_name_low) print >> fobj, " %s->%s = NULL;" % (pb_paramvalue, field_name_low) print >> fobj, " }" print >> fobj, "" elif ('uint32' == pb_type or 'uint64' == pb_type or 'int32' == pb_type or 'int64' == pb_type or 'double' == pb_type): print >> fobj, " if (%s->%s)" % (pb_paramvalue, field_name_low) print >> fobj, " {" print >> fobj, " XFREE(MEM_LIB_PROTOBUF, %s->%s);" % (pb_paramvalue, field_name_low) print >> fobj, " %s->%s = NULL;" % (pb_paramvalue, field_name_low) print >> fobj, " }" print >> fobj, "" else: if ('string' == pb_type): print >> fobj, " if (%s->%s)" % (pb_paramvalue, field_name_low) print >> fobj, " {" print >> fobj, " XFREE(MEM_LIB_PROTOBUF, %s->%s);" % (pb_paramvalue, field_name_low) print >> fobj, " %s->%s = NULL;" % (pb_paramvalue, field_name_low) print >> fobj, " }" print >> fobj, "" elif ('compose' == pb_type): if (is_key): if (1 == cdb_util.is_typedef_key(key_array)): field_name = 'key' else: field_name = 'key->' + key_field_name field_name_low = string.lower(field_name) compose_type = dt_type[1] compose_func = 'pb_compose_' + compose_type + '_to_pb_free_packed' print >> fobj, ' %s(%s->%s);' % (compose_func, pb_paramvalue, field_name_low) elif ('bytes' == pb_type): print >> fobj, " if (%s->%s.data)" % (pb_paramvalue, field_name) print >> fobj, " {" print >> fobj, " XFREE(MEM_LIB_PROTOBUF, %s->%s.data);" % (pb_paramvalue, field_name_low) print >> fobj, " %s->%s.data = NULL;" % (pb_paramvalue, field_name_low) print >> fobj, " }" print >> fobj, ""
def gen_func_pb_c_pb_field(fobj, table, key_array, field, dt_array): tbl_name = table[0] tbl_name_low = string.lower(table[0]) tbl_name_low_key = tbl_name_low + '_key' tbl_value_name = table[1] cdb_paramvalue = 'p_' + tbl_value_name pb_paramvalue = 'p_pb_' + tbl_value_name bypass = 0 key_field_name = "" is_repeated = 0 if ('key' == field[1]): return if (len(field) > 4): dt_type = field[6] else: dt_type = field[3] if ('FLAGS8' == dt_type[1] or 'FLAGS32' == dt_type[1]): field_name = cdb_util.format_field_name(field[3]) else: field_name = cdb_util.format_field_name(field[1]) field_name_low = string.lower(field_name) if ('static' == field_name_low): field_name_low += '_' pb_type = cdb_util.pb_get_pb_type(dt_type, dt_array) if (2 == len(pb_type)): pb_type = pb_type[1] is_repeated = 1 repeat_number = cdb_util.get_array_number(field[1]) if ('string' == pb_type): print >> fobj, " %s->%s = XCALLOC(MEM_LIB_PROTOBUF, sizeof(char*)*%s);" % (pb_paramvalue, field_name_low, repeat_number) print >> fobj, ' %s->n_%s = %s;' % (pb_paramvalue, field_name_low, repeat_number) print >> fobj, ' for (i = 0; i < %s; i++)' % (repeat_number) print >> fobj, ' {' print >> fobj, ' %s->%s[i] = XCALLOC(MEM_LIB_PROTOBUF, sal_strlen(%s->%s[i])+1);' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) print >> fobj, ' sal_strcpy(%s->%s[i], %s->%s[i]);' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) print >> fobj, ' }' elif ('uint32' == pb_type or 'uint64' == pb_type or 'int32' == pb_type or 'int64' == pb_type or 'double' == pb_type): if ('uint32' == pb_type): data_type = "uint32_t" elif ('int32' == pb_type): data_type = "int32_t" elif ('uint64' == pb_type): data_type = "uint64_t" elif ('int64' == pb_type): data_type = "int64_t" elif ('double' == pb_type): data_type = "double" print >> fobj, " %s->%s = XCALLOC(MEM_LIB_PROTOBUF, sizeof(%s)*%s);" % (pb_paramvalue, field_name_low, data_type, repeat_number) print >> fobj, ' %s->n_%s = %s;' % (pb_paramvalue, field_name_low, repeat_number) print >> fobj, ' for (i = 0; i < %s; i++)' % (repeat_number) print >> fobj, ' {' print >> fobj, ' %s->%s[i] = %s->%s[i];' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) print >> fobj, ' }' else: if ('string' == pb_type): print >> fobj, ' %s->%s = XCALLOC(MEM_LIB_PROTOBUF, sal_strlen(%s->%s)+1);' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) print >> fobj, ' sal_strcpy(%s->%s, %s->%s);' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) elif ('uint32' == pb_type): print >> fobj, ' %s->has_%s = TRUE;' % (pb_paramvalue, field_name_low) if ('FLAGS8' == dt_type[1] or 'FLAGS32' == dt_type[1]): data_value = field[1] field_value = field[3] flag_value = field[4] print >> fobj, ' %s->%s = GLB_FLAG_ISSET(%s->%s, %s) ? TRUE : FALSE;' % (pb_paramvalue, field_name_low, cdb_paramvalue, data_value, flag_value) else: print >> fobj, ' %s->%s = %s->%s;' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) elif ('uint64' == pb_type or 'int32' == pb_type or 'int64' == pb_type or 'double' == pb_type): print >> fobj, ' %s->has_%s = TRUE;' % (pb_paramvalue, field_name_low) print >> fobj, ' %s->%s = %s->%s;' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) elif ('bytes' == pb_type): print >> fobj, ' %s->has_%s = TRUE;' % (pb_paramvalue, field_name_low) print >> fobj, ' %s->%s.len = sizeof(%s->%s);' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) print >> fobj, ' %s->%s.data = XCALLOC(MEM_LIB_PROTOBUF, sizeof(%s->%s));' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name) print >> fobj, ' sal_memcpy(%s->%s.data, %s->%s, sizeof(%s->%s));' % (pb_paramvalue, field_name_low, cdb_paramvalue, field_name, cdb_paramvalue, field_name) elif ('compose' == pb_type): compose_type = dt_type[1] compose_func = 'pb_compose_' + compose_type + '_to_pb' compose_refer = cdb_util.pb_get_cdb_compose_reference(compose_type) print >> fobj, ' %s(%s%s->%s, %s->%s);' % (compose_func, compose_refer, cdb_paramvalue, field_name, pb_paramvalue, field_name_low) elif ('none' == pb_type): pass else: pass