From 3779d6ff9924131fadd43488f98385d620409a21 Mon Sep 17 00:00:00 2001 From: Meutel Date: Sat, 31 Dec 2016 10:52:48 +0100 Subject: [PATCH] Book count --- db.c | 21 +++++++++++++++++++++ extern.h | 1 + index.js | 5 ++--- main.c | 2 +- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/db.c b/db.c index 15ff038..3ec3297 100644 --- a/db.c +++ b/db.c @@ -31,6 +31,7 @@ enum stmt { STMT_BOOK, STMT_BOOKS, + STMT_BOOKS_COUNT, STMT_BOOKS_AUTHORS, STMT__MAX }; @@ -40,6 +41,8 @@ static const char *const stmts[STMT__MAX] = { "SELECT books.id AS id,title,series_index,name as series_name,series.id AS series_id FROM books LEFT OUTER JOIN books_series_link ON books.id = books_series_link.book LEFT OUTER JOIN series ON series.id = books_series_link.series WHERE books.id = ?", /* STMT_BOOKS */ "SELECT books.id AS id,title,series_index,name as series_name,series.id AS series_id FROM books LEFT OUTER JOIN books_series_link ON books.id = books_series_link.book LEFT OUTER JOIN series ON series.id = books_series_link.series ORDER BY id LIMIT ? OFFSET ?", + /* STMT_BOOKS_COUNT */ + "SELECT count(id) FROM books", /* STMT_BOOKS_AUTHORS */ "SELECT authors.id, authors.name, books_authors_link.book as book FROM authors, books_authors_link WHERE books_authors_link.author = authors.id AND books_authors_link.book IN ( SELECT id FROM books ORDER BY id LIMIT ? OFFSET ?)", }; @@ -115,6 +118,24 @@ db_book_fill(Book *book, struct ksqlstmt *stmt) } } +int +db_books_count(struct kreq *r) +{ + int count; + struct ksqlstmt *stmt; + + ksql_stmt_alloc(r->arg, &stmt, + stmts[STMT_BOOKS_COUNT], + STMT_BOOKS_COUNT); + if (KSQL_ROW != ksql_stmt_step(stmt)) { + ksql_stmt_free(stmt); + return(0); + } + count = ksql_stmt_int(stmt, 0); + ksql_stmt_free(stmt); + return(count); +} + int db_books_load(struct kreq *r, BookAdv **books, int limit, int offset) { diff --git a/extern.h b/extern.h index 399ae35..26e6424 100644 --- a/extern.h +++ b/extern.h @@ -61,6 +61,7 @@ __BEGIN_DECLS Book *db_book_load(struct kreq *r, int64_t id); int db_books_load(struct kreq *r, BookAdv **books, int limit, int offset); +int db_books_count(struct kreq *r); void db_book_free(Book *p); void db_book_adv_free(BookAdv *p); diff --git a/index.js b/index.js index 93098de..299df17 100644 --- a/index.js +++ b/index.js @@ -37,12 +37,11 @@ } function indexSuccess(resp) { - app.booksCount = 9999; //TODO + app.booksCount = resp.count; } function loadIndex() { - // TODO load books count - sendQuery('cgi-bin/bouquins/books', stdError, indexSuccess); + sendQuery('cgi-bin/bouquins/index', stdError, indexSuccess); } function loadBooks() { diff --git a/main.c b/main.c index 2615c3c..49fc77d 100644 --- a/main.c +++ b/main.c @@ -214,7 +214,7 @@ sendindex(struct kreq *r) http_open(r, KHTTP_200); kjson_open(&req, r); kjson_obj_open(&req); - kjson_putstringp(&req, "data", "index"); + kjson_putintp(&req, "count", db_books_count(r)); kjson_obj_close(&req); kjson_close(&req); }