📄 localcli.cpp
字号:
case cli_int8: *(db_int8*)dst = (db_int8)*(real8*)src; continue; case cli_datetime: *(cli_time_t*)dst = (cli_time_t)*(real8*)src; continue; case cli_real4: *(cli_real4_t*)dst = (real4)*(real8*)src; continue; case cli_real8: *(cli_real8_t*)dst = *(real8*)src; continue; } break; case dbField::tpReference: if (cb->var_type == cli_oid) { *(cli_oid_t*)dst = *(oid_t*)src; continue; } break; case dbField::tpRectangle: if (cb->var_type == cli_rectangle) { *(cli_rectangle_t*)dst = *(cli_rectangle_t*)src; continue; } break; case dbField::tpString: if (cb->var_type == cli_asciiz || cb->var_type == cli_pasciiz) { if (cb->var_type == cli_pasciiz) { dst = *(char**)dst; } dbVarying* v = (dbVarying*)src; int size = v->size; if (cb->set_fnc != NULL) { dst = (char*)cb->set_fnc(cli_asciiz, dst, size, cb->name, stmt->id, data + v->offs, cb->user_data); if (dst != NULL) { memcpy(dst, data + v->offs, size); } } else { int n = size; if (cb->var_len != NULL) { if (n > *cb->var_len) { n = *cb->var_len; } *cb->var_len = size; } memcpy(dst, data + v->offs, n); } continue; } break; case dbField::tpArray: if (cb->var_type >= cli_array_of_oid && cb->var_type <= cli_array_of_string) { dbVarying* v = (dbVarying*)src; int n = v->size; src = data + v->offs; if (cb->set_fnc != NULL) { dst = (char*)cb->set_fnc(cb->var_type, dst, n, cb->name, stmt->id, src, cb->user_data); if (dst == NULL) { continue; } } else { int size = n; if (cb->var_len != NULL) { if (n > *cb->var_len) { n = *cb->var_len; } *cb->var_len = size; } } switch (fd->components->type) { case dbField::tpBool: if (cb->var_type == cli_array_of_bool) { cli_bool_t* dst_elem = (cli_bool_t*)dst; bool* src_elem = (bool*)src; while (--n >= 0) *dst_elem++ = *src_elem++; continue; } break; case dbField::tpInt1: if (cb->var_type == cli_array_of_int1) { cli_int1_t* dst_elem = (cli_int1_t*)dst; int1* src_elem = (int1*)src; while (--n >= 0) *dst_elem++ = *src_elem++; continue; } break; case dbField::tpInt2: if (cb->var_type == cli_array_of_int2) { cli_int2_t* dst_elem = (cli_int2_t*)dst; int2* src_elem = (int2*)src; while (--n >= 0) *dst_elem++ = *src_elem++; continue; } break; case dbField::tpInt4: if (cb->var_type == cli_array_of_int4) { cli_int4_t* dst_elem = (cli_int4_t*)dst; int4* src_elem = (int4*)src; while (--n >= 0) *dst_elem++ = *src_elem++; continue; } break; case dbField::tpInt8: if (cb->var_type == cli_array_of_int8) { cli_int8_t* dst_elem = (cli_int8_t*)dst; db_int8* src_elem = (db_int8*)src; while (--n >= 0) *dst_elem++ = *src_elem++; continue; } break; case dbField::tpReal4: if (cb->var_type == cli_array_of_real4) { cli_real4_t* dst_elem = (cli_real4_t*)dst; real4* src_elem = (real4*)src; while (--n >= 0) *dst_elem++ = *src_elem++; continue; } break; case dbField::tpReal8: if (cb->var_type == cli_array_of_real8) { cli_real8_t* dst_elem = (cli_real8_t*)dst; real8* src_elem = (real8*)src; while (--n >= 0) *dst_elem++ = *src_elem++; continue; } break; case dbField::tpReference: if (cb->var_type == cli_array_of_oid) { cli_oid_t* dst_elem = (cli_oid_t*)dst; oid_t* src_elem = (oid_t*)src; while (--n >= 0) *dst_elem++ = *src_elem++; continue; } break; case dbField::tpString: if (cb->var_type == cli_array_of_string) { char** dst_elem = (char**)dst; dbVarying* src_elem = (dbVarying*)src; while (--n >= 0) { *dst_elem++ = (char*)((char*)src_elem + src_elem->offs); src_elem += 1; } continue; } } } } return cli_unsupported_type; } return cli_ok;}int dbCLI::store_columns(char* data, statement_desc* stmt){ for (column_binding* cb = stmt->columns; cb != NULL; cb = cb->next) { dbFieldDescriptor* fd = cb->field; char* dst = data + fd->appOffs; char* src = (char*)cb->var_ptr; // Allow storing to structures with one component if (fd->type == dbField::tpStructure && fd->components->next == NULL) { fd = fd->components; } switch (fd->type) { case dbField::tpBool: switch (cb->var_type) { case cli_bool: *(bool*)dst = *(cli_bool_t*)src; continue; case cli_int1: *(bool*)dst = *(cli_int1_t*)src != 0; continue; case cli_int2: *(bool*)dst = *(cli_int2_t*)src != 0; continue; case cli_int4: *(bool*)dst = *(cli_int4_t*)src != 0; continue; case cli_int8: *(bool*)dst = *(db_int8*)src != 0; continue; case cli_datetime: *(bool*)dst = *(cli_time_t*)src != 0; continue; case cli_real4: *(bool*)dst = *(cli_real4_t*)src != 0; continue; case cli_real8: *(bool*)dst = *(cli_real8_t*)src != 0; continue; } break; case dbField::tpInt1: switch (cb->var_type) { case cli_bool: *(int1*)dst = *(cli_bool_t*)src ? 1 : 0; continue; case cli_int1: *(int1*)dst = *(cli_int1_t*)src; continue; case cli_int2: *(int1*)dst = (int1)*(cli_int2_t*)src; continue; case cli_int4: *(int1*)dst = (int1)*(cli_int4_t*)src; continue; case cli_int8: *(int1*)dst = (int1)*(db_int8*)src; continue; case cli_datetime: *(int1*)dst = (int1)*(cli_time_t*)src; continue; case cli_real4: *(int1*)dst = (int1)*(cli_real4_t*)src; continue; case cli_real8: *(int1*)dst = (int1)*(cli_real8_t*)src; continue; } break; case dbField::tpInt2: switch (cb->var_type) { case cli_bool: *(int2*)dst = *(cli_bool_t*)src ? 1 : 0; continue; case cli_int1: *(int2*)dst = *(cli_int1_t*)src; continue; case cli_int2: *(int2*)dst = *(cli_int2_t*)src; continue; case cli_int4: *(int2*)dst = (int2)*(cli_int4_t*)src; continue; case cli_int8: *(int2*)dst = (int2)*(db_int8*)src; continue; case cli_datetime: *(int2*)dst = (int2)*(cli_time_t*)src; continue; case cli_real4: *(int2*)dst = (int2)*(cli_real4_t*)src; continue; case cli_real8: *(int2*)dst = (int2)*(cli_real8_t*)src; continue; } break; case dbField::tpInt4: switch (cb->var_type) { case cli_bool: *(int4*)dst = *(cli_bool_t*)src ? 1 : 0; continue; case cli_int1: *(int4*)dst = *(cli_int1_t*)src; continue; case cli_int2: *(int4*)dst = *(cli_int2_t*)src; continue; case cli_autoincrement:#ifdef AUTOINCREMENT_SUPPORT *(int4*)dst = cb->field->defTable->autoincrementCount;#endif continue; case cli_int4: *(int4*)dst = *(cli_int4_t*)src; continue; case cli_int8: *(int4*)dst = (int4)*(db_int8*)src; continue; case cli_datetime: *(int4*)dst = (int4)*(cli_time_t*)src; continue; case cli_real4: *(int4*)dst = (int4)*(cli_real4_t*)src; continue; case cli_real8: *(int4*)dst = (int4)*(cli_real8_t*)src; continue; } break; case dbField::tpInt8: switch (cb->var_type) { case cli_bool: *(db_int8*)dst = *(cli_bool_t*)src ? 1 : 0; continue; case cli_int1: *(db_int8*)dst = *(cli_int1_t*)src; continue; case cli_int2: *(db_int8*)dst = *(cli_int2_t*)src; continue; case cli_int4: *(db_int8*)dst = *(cli_int4_t*)src; continue; case cli_int8: *(db_int8*)dst = *(db_int8*)src; continue; case cli_datetime: *(db_int8*)dst = (db_int8)*(cli_time_t*)src; continue; case cli_real4: *(db_int8*)dst = (db_int8)*(cli_real4_t*)src; continue; case cli_real8: *(db_int8*)dst = (db_int8)*(cli_real8_t*)src; continue; } break; case dbField::tpReal4: switch (cb->var_type) { case cli_bool: *(real4*)dst = (real4)(*(cli_bool_t*)src ? 1 : 0); continue; case cli_int1: *(real4*)dst = *(cli_int1_t*)src; continue; case cli_int2: *(real4*)dst = *(cli_int2_t*)src; continue; case cli_int4: *(real4*)dst = (real4)*(cli_int4_t*)src; continue; case cli_int8: *(real4*)dst = (real4)*(db_int8*)src; continue; case cli_datetime: *(real4*)dst = (real4)*(cli_time_t*)src; continue; case cli_real4: *(real4*)dst = *(cli_real4_t*)src; continue; case cli_real8: *(real4*)dst = (real4)*(cli_real8_t*)src; continue; } break; case dbField::tpReal8: switch (cb->var_type) { case cli_bool: *(real8*)dst = *(cli_bool_t*)src ? 1 : 0; continue; case cli_int1: *(real8*)dst = *(cli_int1_t*)src; continue; case cli_int2: *(real8*)dst = *(cli_int2_t*)src; continue; case cli_int4: *(real8*)dst = *(cli_int4_t*)src; continue; case cli_int8: *(real8*)dst = (real8)*(db_int8*)src; continue; case cli_datetime: *(real8*)dst = (real8)*(cli_time_t*)src; continue; case cli_real4: *(real8*)dst = *(cli_real4_t*)src; continue; case cli_real8: *(real8*)dst = *(cli_real8_t*)src; continue; } break; case dbField::tpReference: if (cb->var_type == cli_oid) { *(oid_t*)dst = *(cli_oid_t*)src; continue; } break; case dbField::tpRectangle: if (cb->var_type == cli_rectangle) { *(cli_rectangle_t*)dst = *(cli_rectangle_t*)src; continue; } break; case dbField::tpString: if (cb->var_type == cli_pasciiz) { *(char**)dst = *(char**)src; continue; } else if (cb->var_type == cli_asciiz) { if (cb->get_fnc != NULL) { int len; src = (char*)cb->get_fnc(cb->var_type, src, &len, cb->name, stmt->id, cb->user_data); } *(char**)dst = src; continue; } break; case dbField::tpArray: if (cb->var_type >= cli_array_of_oid && cb->var_type <= cli_array_of_string) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -