⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 localcli.cpp

📁 FastDb是高效的内存数据库系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
              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 + -