aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2017-10-06 03:40:52 +0200
committerNeels Hofmeyr <neels@hofmeyr.de>2017-10-10 02:38:46 +0200
commitf31445915e79cc07236941c5fd5ce16268eaa255 (patch)
tree85b93482dce5a297217c49cd73366c61ac15be47
parent518335e688ea79a41cb6ce0b6b65ad829ece6f3f (diff)
cosmetic: refactor db_bind_imsi() as db_bind_text()
There are more uses for a generalized db_bind_text(), and in an upcoming patch there will be similar functions like db_bind_int(). Also, add argument param_name, optionally indicating a named SQL parameter to bind to, which will be used in subsequent patches. So far, all callers pass NULL to yield previous db_bind_imsi() behavior of binding to the first param. Change-Id: I87bc46a23a724677e8319d6a4b032976b7ba9394
-rw-r--r--src/db.c19
-rw-r--r--src/db.h2
-rw-r--r--src/db_hlr.c6
3 files changed, 18 insertions, 9 deletions
diff --git a/src/db.c b/src/db.c
index 6566527..4bba2f0 100644
--- a/src/db.c
+++ b/src/db.c
@@ -77,16 +77,25 @@ bool db_remove_reset(sqlite3_stmt *stmt)
return true;
}
-/* bind IMSI and do proper cleanup in case of failure */
-bool db_bind_imsi(sqlite3_stmt *stmt, const char *imsi)
+/** bind text arg and do proper cleanup in case of failure. If param_name is
+ * NULL, bind to the first parameter (useful for SQL statements that have only
+ * one parameter). */
+bool db_bind_text(sqlite3_stmt *stmt, const char *param_name, const char *text)
{
- int rc = sqlite3_bind_text(stmt, 1, imsi, -1, SQLITE_STATIC);
+ int rc;
+ int idx = param_name ? sqlite3_bind_parameter_index(stmt, param_name) : 1;
+ if (idx < 1) {
+ LOGP(DDB, LOGL_ERROR, "Error composing SQL, cannot bind parameter '%s'\n",
+ param_name);
+ return false;
+ }
+ rc = sqlite3_bind_text(stmt, idx, text, -1, SQLITE_STATIC);
if (rc != SQLITE_OK) {
- LOGP(DDB, LOGL_ERROR, "Error binding IMSI %s: %d\n", imsi, rc);
+ LOGP(DDB, LOGL_ERROR, "Error binding text to SQL parameter %s: %d\n",
+ param_name ? param_name : "#1", rc);
db_remove_reset(stmt);
return false;
}
-
return true;
}
diff --git a/src/db.h b/src/db.h
index 0064a4d..6d6723a 100644
--- a/src/db.h
+++ b/src/db.h
@@ -23,7 +23,7 @@ struct db_context {
};
bool db_remove_reset(sqlite3_stmt *stmt);
-bool db_bind_imsi(sqlite3_stmt *stmt, const char *imsi);
+bool db_bind_text(sqlite3_stmt *stmt, const char *param_name, const char *text);
void db_close(struct db_context *dbc);
struct db_context *db_open(void *ctx, const char *fname);
diff --git a/src/db_hlr.c b/src/db_hlr.c
index fa962f3..3bf3912 100644
--- a/src/db_hlr.c
+++ b/src/db_hlr.c
@@ -43,7 +43,7 @@ int db_subscr_get_by_imsi(struct db_context *dbc, const char *imsi,
sqlite3_stmt *stmt = dbc->stmt[DB_STMT_SEL_BY_IMSI];
int rc;
- if (!db_bind_imsi(stmt, imsi))
+ if (!db_bind_text(stmt, NULL, imsi))
return -EINVAL;
/* execute the statement */
@@ -86,7 +86,7 @@ int db_subscr_ps(struct db_context *dbc, const char *imsi, bool enable)
dbc->stmt[enable ? DB_STMT_SET_NAM_PS_BY_IMSI : DB_STMT_UNSET_NAM_PS_BY_IMSI];
int rc;
- if (!db_bind_imsi(stmt, imsi))
+ if (!db_bind_text(stmt, NULL, imsi))
return -EINVAL;
rc = sqlite3_step(stmt); /* execute the statement */
@@ -158,7 +158,7 @@ int db_subscr_purge(struct db_context *dbc, const char *imsi, bool is_ps)
else
stmt = dbc->stmt[DB_STMT_UPD_PURGE_CS_BY_IMSI];
- if (!db_bind_imsi(stmt, imsi))
+ if (!db_bind_text(stmt, NULL, imsi))
return -EINVAL;
/* execute the statement */