#include <string.h>
#include <sqlite3.h>
-static char * talker_email_query = "select email from auth_user,"
- "events_speaker where auth_user.id = events_speaker.user_id "
- "and events_speaker.id = %d;";
-static char * talker_name_query = "select first_name from auth_user,"
+static char * talker_user_query = "select %s from auth_user,"
"events_speaker where auth_user.id = events_speaker.user_id "
"and events_speaker.id = %d;";
-static char * get_talker_userfield(sqlite3 *db, char *query, int id)
+static char * get_oneliner(sqlite3 *db, char *query, size_t qlen)
{
sqlite3_stmt *stmt;
- char * s;
int r;
- char *email = NULL;
- r = asprintf(&s, query, id);
- r = sqlite3_prepare_v2(db, s, r, &stmt, NULL);
+ char *value = NULL;
+ if (!qlen)
+ qlen = strlen(query);
+ r = sqlite3_prepare_v2(db, query, qlen, &stmt, NULL);
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ if (value)
+ free(value);
+ value = strdup(sqlite3_column_text(stmt, 0));
+ }
+ sqlite3_finalize(stmt);
+ return value;
+}
+
+static char * get_oneliner_field_by_id(sqlite3 *db, char *query,
+ char *field, int id)
+{
+ char *s;
+ int r;
+ char *value;
+ r = asprintf(&s, query, field, id);
+ value = get_oneliner(db, s, r);
free(s);
+ return value;
+}
+
+static int get_many_ids(sqlite3 *db, char *query, size_t qlen, int *ids,
+ size_t len)
+{
+ sqlite3_stmt *stmt;
+ int r;
+ int i = 0;
+ if (!qlen)
+ qlen = strlen(query);
+ r = sqlite3_prepare_v2(db, query, qlen, &stmt, NULL);
while (sqlite3_step(stmt) == SQLITE_ROW) {
- if (email)
- free(email);
- email = strdup(sqlite3_column_text(stmt, 0));
+ if (i < len)
+ ids[i++] = sqlite3_column_int(stmt, 0);
}
sqlite3_finalize(stmt);
- return email;
+ return i;
}
char * get_talker_email(sqlite3 *db, int id)
{
- return get_talker_userfield(db, talker_email_query, id);
+ return get_oneliner_field_by_id(db, talker_user_query, "email", id);
}
char * get_talker_name(sqlite3 *db, int id)
{
- return get_talker_userfield(db, talker_name_query, id);
+ return get_oneliner_field_by_id(db, talker_user_query, "first_name",
+ id);
}
+static char * talk_title_query = "select %s from events_talk where id = %d;";
+char * get_talk_title(sqlite3 *db, int id)
+{
+ return get_oneliner_field_by_id(db, talk_title_query, "title", id);
+}
+static char *talk_talkers_query = "select speaker_id from "
+ "events_talk_speakers where talk_id = %d;";
+int get_talk_talkers(sqlite3 *db, int id, int *ids, int len)
+{
+ int r;
+ char *query;
+ size_t qlen;
+ qlen = asprintf(&query, talk_talkers_query, id);
+ r = get_many_ids(db, query, qlen, ids, len);
+ free(query);
+ return r;
+}