#include #include #include #include "sqlite/sqlite3.h" int main(int argc, const char *argv[static argc]) { if (2 != argc) errx(1, "usage: %s dbfile", argv[0]); sqlite3 *db; if (sqlite3_open(argv[1], &db)) errx(1, "sqlite3_open: %s", sqlite3_errmsg(db)); const char *sql = "SELECT " "CAST(strftime('%Y', start, 'localtime') as INT), " "CAST(strftime('%m', start, 'localtime') as INT), " "CAST(strftime('%d', start, 'localtime') as INT), " "(start), " "unixepoch(end), " "timediff(end, start), " "summary " "FROM event " "WHERE datetime('now', 'start of day') < start " "AND summary IS NOT NULL " "ORDER BY start"; sqlite3_stmt *stmt = NULL; if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL)) errx(1, "sqlite3_prepare_v2: %s", sqlite3_errmsg(db)); for (;;) { int step = sqlite3_step(stmt); if (SQLITE_DONE == step) break; if (SQLITE_ROW != step) errx(1, "sqlite3_step: %s", sqlite3_errmsg(db)); int sy = sqlite3_column_int(stmt, 0); int sm = sqlite3_column_int(stmt, 1); int sd = sqlite3_column_int(stmt, 2); const unsigned char *start = sqlite3_column_text(stmt, 3); const unsigned char *end = sqlite3_column_text(stmt, 4); const unsigned char *td = sqlite3_column_text(stmt, 5); const unsigned char *summary = sqlite3_column_text(stmt, 6); assert(start); assert(end); assert(td); assert(summary); printf("%04d %02d %02d %s %s\n", sy, sm, sd, start, summary); } sqlite3_close(db); }