diff options
Diffstat (limited to 'src/gsql_conn.c')
-rw-r--r-- | src/gsql_conn.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/gsql_conn.c b/src/gsql_conn.c index 4d53a03..64cec27 100644 --- a/src/gsql_conn.c +++ b/src/gsql_conn.c @@ -28,32 +28,32 @@ static struct sql_iface sql_iftab[MAX_IFACES]; SCM_GLOBAL_SYMBOL (gamma_sql_error, "sql-error"); static long sql_connect_tag = -1; /* SMOB functions: */ static SCM -sql_connect_mark (SCM connect_smob) +sql_connect_mark(SCM connect_smob) { struct sql_connect *conn = (struct sql_connect *)SCM_CDR(connect_smob); - return sql_iftab[conn->iface].mark(conn); + if (sql_iftab[conn->iface].mark) + return sql_iftab[conn->iface].mark(conn); } -static scm_sizet -sql_connect_free (SCM connect_smob) +static size_t +sql_connect_free(SCM connect_smob) { - scm_sizet size = sizeof(struct sql_connect); struct sql_connect *conn = (struct sql_connect *)SCM_CDR(connect_smob); - size += sql_iftab[conn->iface].free(conn); + sql_iftab[conn->iface].free(conn); if (conn->hostname) free(conn->hostname); if (conn->username) free(conn->username); if (conn->database) free(conn->database); scm_gc_free(conn, sizeof *conn, "SQL connection"); - return size; + return 0; } static int sql_connect_print (SCM connect_smob, SCM port, scm_print_state * pstate) { struct sql_connect *conn = (struct sql_connect *)SCM_CDR(connect_smob); @@ -85,31 +85,31 @@ sql_find_iface(const char *name) if (strcmp(sql_iftab[iface].name, name) == 0) return iface; return -1; } SCM -sql_connect_create (char *name) +sql_connect_create(char *name) { struct sql_connect *conn; int iface = sql_find_iface(name); if (iface < 0) scm_misc_error("sql_connect_create", "Unknown SQL interface ~S", scm_list_1(scm_from_locale_string(name))); - conn = scm_gc_malloc (sizeof (*conn), "sql_connect"); + conn = scm_gc_malloc(sizeof (*conn), "sql_connect"); memset(conn, 0, sizeof *conn); conn->iface = iface; - SCM_RETURN_NEWSMOB (sql_connect_tag, conn); + SCM_RETURN_NEWSMOB(sql_connect_tag, conn); } static int -scm_is_sql_connect (SCM scm) +scm_is_sql_connect(SCM scm) { - return SCM_NIMP (scm) && SCM_CAR (scm) == (SCM) sql_connect_tag; + return SCM_NIMP(scm) && SCM_CAR (scm) == (SCM) sql_connect_tag; } /* Interface */ static void gamma_cvt_iface(SCM inval, void *outval, const char *func_name) @@ -131,13 +131,13 @@ gamma_cvt_iface(SCM inval, void *outval, const char *func_name) scm_list_2(scm_from_int(1), inval)); *(int*)outval = iface; } -SCM_DEFINE_PUBLIC (sql_open_connection, "sql-open-connection", 1, 0, 0, +SCM_DEFINE_PUBLIC(sql_open_connection, "sql-open-connection", 1, 0, 0, (SCM param), "Connect to a database. Take connection parameters from @var{param}, " "which must be a list of conses. In each cons, the @samp{car} contains " "a @dfn{key} identifying the parameter, and the @samp{cdr} supplies the " "value for that parameter.\n" "\n" @@ -182,26 +182,26 @@ SCM_DEFINE_PUBLIC (sql_open_connection, "sql-open-connection", 1, 0, 0, smob = sql_iftab[iface].connect(param, FUNC_NAME); return smob; } #undef FUNC_NAME -SCM_DEFINE_PUBLIC (sql_close_connection, "sql-close-connection", 1, 0, 0, +SCM_DEFINE_PUBLIC(sql_close_connection, "sql-close-connection", 1, 0, 0, (SCM conn), "Close connection to a database.") #define FUNC_NAME s_sql_close_connection { struct sql_connect *cp; SCM_ASSERT(scm_is_sql_connect(conn), conn, SCM_ARG1, FUNC_NAME); cp = (struct sql_connect *)SCM_CDR(conn); sql_iftab[cp->iface].close(cp); return SCM_UNSPECIFIED; } #undef FUNC_NAME -SCM_DEFINE_PUBLIC (sql_query, "sql-query", 2, 0, 0, +SCM_DEFINE_PUBLIC(sql_query, "sql-query", 2, 0, 0, (SCM conn, SCM query), "Send the SQL query @var{query} to the server using connection @var{conn} \ and return the result.\n\ If @var{query} is a @samp{SELECT}, or similar query, returning tuples, the \ return value is a list of rows. Each row is a list of values, one for each \ column. All values are returned as strings. NULL values are returned as \ |