Browse Source

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.
master
Gavan Fantom 17 years ago
parent
commit
de63ebf6ce
  1. 2
      src/lsi/abi.h
  2. 2
      src/lsi/abispec
  3. 49
      src/lsi/vm.c

2
src/lsi/abi.h

@ -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);

2
src/lsi/abispec

@ -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

49
src/lsi/vm.c

@ -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)

Loading…
Cancel
Save