Esempio n. 1
0
/**
 * 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);
        }
}
Esempio n. 2
0
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;
	}
}
Esempio n. 3
0
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;
}