| 105 | } |
| 106 | |
| 107 | int db_check_api(db_func_t* dbf, char *mname) |
| 108 | { |
| 109 | if(dbf==NULL) |
| 110 | return -1; |
| 111 | |
| 112 | /* All modules must export db_use_table */ |
| 113 | if (dbf->use_table == 0) { |
| 114 | LM_ERR("module %s does not export db_use_table function\n", mname); |
| 115 | goto error; |
| 116 | } |
| 117 | |
| 118 | /* All modules must export db_init */ |
| 119 | if (dbf->init == 0) { |
| 120 | LM_ERR("module %s does not export db_init function\n", mname); |
| 121 | goto error; |
| 122 | } |
| 123 | |
| 124 | /* All modules must export db_close */ |
| 125 | if (dbf->close == 0) { |
| 126 | LM_ERR("module %s does not export db_close function\n", mname); |
| 127 | goto error; |
| 128 | } |
| 129 | |
| 130 | if (dbf->query) { |
| 131 | dbf->cap |= DB_CAP_QUERY; |
| 132 | } |
| 133 | |
| 134 | if (dbf->fetch_result) { |
| 135 | dbf->cap |= DB_CAP_FETCH; |
| 136 | } |
| 137 | |
| 138 | if (dbf->raw_query) { |
| 139 | dbf->cap |= DB_CAP_RAW_QUERY; |
| 140 | } |
| 141 | |
| 142 | /* Free result must be exported if DB_CAP_QUERY or |
| 143 | * DB_CAP_RAW_QUERY is set */ |
| 144 | if ((dbf->cap & (DB_CAP_QUERY|DB_CAP_RAW_QUERY)) && (dbf->free_result==0)) { |
| 145 | LM_ERR("module %s supports queries but does not export free_result\n", |
| 146 | mname); |
| 147 | goto error; |
| 148 | } |
| 149 | |
| 150 | if (dbf->insert) { |
| 151 | dbf->cap |= DB_CAP_INSERT; |
| 152 | } |
| 153 | |
| 154 | if (dbf->delete) { |
| 155 | dbf->cap |= DB_CAP_DELETE; |
| 156 | } |
| 157 | |
| 158 | if (dbf->update) { |
| 159 | dbf->cap |= DB_CAP_UPDATE; |
| 160 | } |
| 161 | |
| 162 | if (dbf->replace) { |
| 163 | dbf->cap |= DB_CAP_REPLACE; |
| 164 | } |