| 1039 | } |
| 1040 | |
| 1041 | bool |
| 1042 | dbcontext::parse_fields(TABLE *const table, const char *str, |
| 1043 | prep_stmt::fields_type& flds) |
| 1044 | { |
| 1045 | string_ref flds_sr(str, strlen(str)); |
| 1046 | std::vector<string_ref> fldnms; |
| 1047 | if (flds_sr.size() != 0) { |
| 1048 | split(',', flds_sr, fldnms); |
| 1049 | } |
| 1050 | for (size_t i = 0; i < fldnms.size(); ++i) { |
| 1051 | Field **fld = 0; |
| 1052 | size_t j = 0; |
| 1053 | for (fld = table->field; *fld; ++fld, ++j) { |
| 1054 | DBG_FLD(fprintf(stderr, "f %s\n", (*fld)->field_name.str)); |
| 1055 | string_ref fn((*fld)->field_name.str, (*fld)->field_name.length); |
| 1056 | if (fn == fldnms[i]) { |
| 1057 | break; |
| 1058 | } |
| 1059 | } |
| 1060 | if (*fld == 0) { |
| 1061 | DBG_FLD(fprintf(stderr, "UNKNOWN FLD %s [%s]\n", retflds, |
| 1062 | std::string(fldnms[i].begin(), fldnms[i].size()).c_str())); |
| 1063 | return false; |
| 1064 | } |
| 1065 | DBG_FLD(fprintf(stderr, "FLD %s %zu\n", (*fld)->field_name.str, j)); |
| 1066 | flds.push_back(j); |
| 1067 | } |
| 1068 | return true; |
| 1069 | } |
| 1070 | |
| 1071 | enum db_write_op { |
| 1072 | db_write_op_none = 0, |