Implement a simpler direct API for getting and setting numeric values in

the SQL database. This is mostly because the lack of string handling makes
manipulation of queries difficult.
This commit is contained in:
2007-12-26 14:57:16 +00:00
parent df2e38a3e9
commit de63ebf6ce
3 changed files with 53 additions and 0 deletions

View File

@@ -51,3 +51,5 @@ int vm_intfn_cmdsocket_write(void);
int vm_intfn_cmdsocket_prefix(void);
int vm_intfn_sql_query(void);
int vm_intfn_sql_query_1s(void);
int vm_intfn_sql_getvar(void);
int vm_intfn_sql_setvar(void);

View File

@@ -41,6 +41,8 @@ function cmdsocket_prefix
/* NOT_YET function_v sql_query */
function sql_query
function sql_query_1s
function sql_getvar
function sql_setvar
/*
* The ABI should be identified by a SHA1 hash of this file

View File

@@ -596,6 +596,55 @@ int vm_intfn_sql_query_1s(void)
stack_poke(vm_current, 0, result); /* return value */
return 1;
}
int vm_intfn_sql_getvar(void)
{
int len;
char buf[VM_STRING_MAX];
char query[VM_STRING_MAX];
int result;
len = stack_get(vm_current, 1);
if (len >= VM_STRING_MAX) {
printf("Excessive string length - can't perform query\n");
return 1;
}
snprintf(buf, len+1, stack_getstr(vm_current, len, 1));
snprintf(query, VM_STRING_MAX, "SELECT value FROM vars WHERE name=\"%s\"", buf);
sql_query(query, strlen(query), &result);
/* XXX what to do with an error here? */
stack_poke(vm_current, 0, result); /* return value */
return 1;
}
int vm_intfn_sql_setvar(void)
{
int len, val;
char buf[VM_STRING_MAX];
char query[VM_STRING_MAX];
int result;
val = stack_get(vm_current, 1);
len = stack_get(vm_current, 2);
if (len >= VM_STRING_MAX) {
printf("Excessive string length - can't perform query\n");
return 1;
}
snprintf(buf, len+1, stack_getstr(vm_current, len, 2));
snprintf(query, VM_STRING_MAX, "INSERT OR REPLACE INTO vars VALUES(\"%s\", %d)", buf, val);
sql_query(query, strlen(query), &result);
/* XXX what to do with an error here? */
stack_poke(vm_current, 0, result); /* return value */
return 1;
}
#endif
int vm_intfn_beatdetect_read(void)