/** * gom_command_builder_build_select: * @builder: (in): A #GomCommandBuilder. * * Builds a #GomCommand that will select all the rows matching the current * query params. * * Returns: (transfer full): A #GomCommand. */ GomCommand * gom_command_builder_build_select (GomCommandBuilder *builder) { GomCommandBuilderPrivate *priv; GomResourceClass *klass; GomCommand *command; GString *str; g_return_val_if_fail(GOM_IS_COMMAND_BUILDER(builder), NULL); priv = builder->priv; klass = g_type_class_ref(priv->resource_type); str = g_string_new("SELECT "); add_fields(str, klass); add_from(str, klass); add_joins(str, klass); add_m2m(str, klass, priv->m2m_table, priv->m2m_type); add_where(str, priv->m2m_type, priv->m2m_table, priv->filter); add_limit(str, priv->limit); add_offset(str, priv->offset); command = g_object_new(GOM_TYPE_COMMAND, "adapter", priv->adapter, "sql", str->str, NULL); bind_params(command, priv->filter); g_type_class_unref(klass); g_string_free(str, TRUE); return command; }
bool add_bind_value(Args&&... args) { _code = bind_params(_statement, 1, std::forward<Args>(args)...); if (_code != SQLITE_OK) { return false; } return execute(); }
int execute_many(sqlite3_stmt *stmt, const mxArray *params) { int i, n = mxGetN(params); for (i = 0; i < n; i++) { mexPrintf("binding params %d of %zu\n", i, mxGetM(params)); if (bind_params(stmt, params, i) != SQLITE_OK) { mexErrMsgIdAndTxt("sqlite3:bind", "failed to bind parameters to statement"); } int res = sqlite3_step(stmt); if (res != SQLITE_DONE) { return res; } sqlite3_reset(stmt); sqlite3_clear_bindings(stmt); } return SQLITE_DONE; }
void SOCICursorBackend::exec(const Values ¶ms) { try { if (!executed_ && in_params_.size()) bound_first_ = true; if (!bound_first_) { if (executed_) { delete stmt_; stmt_ = new soci::statement(*conn_); stmt_->alloc(); stmt_->prepare(sql_); in_params_.clear(); in_flags_.clear(); } TypeCodes types(params.size()); for (size_t i = 0; i < params.size(); ++i) types[i] = params[i].get_type(); bind_params(types); } executed_ = true; for (size_t i = 0; i < params.size(); ++i) { const Value ¶m = params[i]; if (param.is_null()) { in_flags_[i] = soci::i_null; continue; } in_flags_[i] = soci::i_ok; switch (param_types_[i]) { case Value::INTEGER: { int &x = *(int *)&(in_params_[i][0]); x = param.as_integer(); break; } case Value::LONGINT: { LongInt &x = *(LongInt *)&(in_params_[i][0]); x = param.as_longint(); break; } case Value::FLOAT: { double &x = *(double *)&(in_params_[i][0]); x = param.as_float(); break; } case Value::DATETIME: { std::tm &x = *(std::tm *)&(in_params_[i][0]); memset(&x, 0, sizeof(x)); const DateTime &d = param.as_date_time(); x.tm_year = dt_year(d) - 1900; x.tm_mon = dt_month(d) - 1; x.tm_mday = dt_day(d); x.tm_hour = dt_hour(d); x.tm_min = dt_minute(d); x.tm_sec = dt_second(d); break; } default: { in_params_[i] = NARROW(param.as_string()); } } } stmt_->execute(!is_select_); } catch (const soci::soci_error &e) { throw DBError(WIDEN(e.what())); } }