/** * Binds a gchar *blob_value into the prepared statement. * @param db is the database concerned by stmt statement. It is only used * here to print an error if any. * @param stmt is the prepared statement in which we want to bind the string * 'value' in 'name' parameter * @param name represents the name of the parameter in the prepared statement * which we want to fill in with 'value' * @param blob_value is a gchar * string to be filled in 'name' parameter in the * prepared statement. * @param length is the total number of bytes in blob_values to be taken into * account. */ static void bind_blob_value(sqlite3 *db, sqlite3_stmt *stmt, const gchar *name, gchar *blob_value, gsize length) { int index = 0; int result = 0; if (stmt != NULL && name != NULL) { index = sqlite3_bind_parameter_index(stmt, name); result = sqlite3_bind_blob64(stmt, index, blob_value, length, NULL); print_on_db_error(db, result, name); } }
int bindValue(sqlite3_stmt* stmt, int col, const sqlite_value* val) { switch(val->type) { case SQLITE_INTEGER: return sqlite3_bind_int64(stmt, col, val->data1.iVal); case SQLITE_FLOAT: return sqlite3_bind_double(stmt, col, val->data1.dVal); case SQLITE_TEXT: return sqlite3_bind_text(stmt, col, val->data2, val->data1.iVal, nullptr); case SQLITE_BLOB: return sqlite3_bind_blob64(stmt, col, val->data2, val->data1.iVal, nullptr); case SQLITE_NULL: return sqlite3_bind_null(stmt, col); default: return SQLITE_INTERNAL; } }
static int _bind_arg(lua_State *T, int t_idx, sqlite3_stmt *stmt, int s_idx) { int ret = 0; int kind = lua_type(T, t_idx); kind_is_known: switch (kind) { case LUA_TNIL: /* Should nil mean NULL.. ret = sqlite3_bind_null(stmt, i-1); break; ..or don't bind.. */ return SQLITE_OK; case LUA_TNUMBER: ret = sqlite3_bind_double(stmt, s_idx, lua_tonumber(T, t_idx)); break; case LUA_TSTRING: { size_t len; const char *str = lua_tolstring(T, t_idx, &len); ret = sqlite3_bind_text(stmt, s_idx, str, len, SQLITE_STATIC); } break; case BIND_INT: ret = sqlite3_bind_int(stmt, s_idx, lua_tointeger(T, t_idx)); break; case BIND_INT64: ret = sqlite3_bind_int(stmt, s_idx, lua_tointeger(T, t_idx)); break; case BIND_BLOB: { size_t len; const char *str = lua_tolstring(T, t_idx, &len); ret = sqlite3_bind_blob(stmt, s_idx, str, len, SQLITE_STATIC); } break; case BIND_BLOB64: { size_t len; const char *str = lua_tolstring(T, t_idx, &len); ret = sqlite3_bind_blob64(stmt, s_idx, str, len, SQLITE_STATIC); } break; case BIND_ZEROBLOB: ret = sqlite3_bind_zeroblob(stmt, s_idx, lua_tointeger(T, t_idx)); break; case BIND_ZEROBLOB64: ret = sqlite3_bind_zeroblob64(stmt, s_idx, lua_tointeger(T, t_idx)); break; case LUA_TTABLE: { lua_rawgeti(T, t_idx, 1); kind = lua_tointeger(T, -1); lua_pop(T, 1); lua_rawgeti(T, t_idx, 2); t_idx = -1; goto kind_is_known; } default: (void)sqlite3_clear_bindings(stmt); return luaL_argerror(T, t_idx, "expected nil, number or string"); } if (t_idx == -1) { lua_pop(T, 1); } return ret; }