| 1113 | } |
| 1114 | |
| 1115 | bool |
| 1116 | dbcontext::parse_fields(TABLE *const table, const char *str, |
| 1117 | prep_stmt::fields_type& flds) |
| 1118 | { |
| 1119 | string_ref flds_sr(str, strlen(str)); |
| 1120 | std::vector<string_ref> fldnms; |
| 1121 | if (flds_sr.size() != 0) { |
| 1122 | split(',', flds_sr, fldnms); |
| 1123 | } |
| 1124 | for (size_t i = 0; i < fldnms.size(); ++i) { |
| 1125 | Field **fld = 0; |
| 1126 | size_t j = 0; |
| 1127 | for (fld = table->field; *fld; ++fld, ++j) { |
| 1128 | DBG_FLD(fprintf(stderr, "f %s\n", (*fld)->field_name)); |
| 1129 | string_ref fn((*fld)->field_name, strlen((*fld)->field_name)); |
| 1130 | if (fn == fldnms[i]) { |
| 1131 | break; |
| 1132 | } |
| 1133 | } |
| 1134 | if (*fld == 0) { |
| 1135 | DBG_FLD(fprintf(stderr, "UNKNOWN FLD %s [%s]\n", retflds, |
| 1136 | std::string(fldnms[i].begin(), fldnms[i].size()).c_str())); |
| 1137 | return false; |
| 1138 | } |
| 1139 | DBG_FLD(fprintf(stderr, "FLD %s %zu\n", (*fld)->field_name, j)); |
| 1140 | flds.push_back(j); |
| 1141 | } |
| 1142 | return true; |
| 1143 | } |
| 1144 | |
| 1145 | enum db_write_op { |
| 1146 | db_write_op_none = 0, |