From 2e2eb0a6c9fa8a17353e176fb31f000c29543732 Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Sun, 5 Jan 2020 20:24:14 -0800 Subject: [PATCH] Export directly into DB Signed-off-by: James Ketrenos --- scanner/Makefile | 11 ++++----- scanner/scanner.c | 59 +++++++++++++++++++++++++++++++++++------------ 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/scanner/Makefile b/scanner/Makefile index bb5e1ae..d1b0397 100644 --- a/scanner/Makefile +++ b/scanner/Makefile @@ -1,10 +1,9 @@ all: scanner -#ifeq ("$(wildcard /usr/include/sqlite3.h)","") -# @echo "Install libsqlite3-dev" -# @false -#endif +ifeq ("$(wildcard /usr/include/sqlite3.h)","") + @echo "Install libsqlite3-dev" + @false +endif scanner: scanner.c - gcc -o scanner scanner.c -lm -# gcc -o scanner scanner.c -lm -lsqlite3 + gcc -o scanner scanner.c -lm -lsqlite3 diff --git a/scanner/scanner.c b/scanner/scanner.c index c9e3888..d5f78d7 100644 --- a/scanner/scanner.c +++ b/scanner/scanner.c @@ -4,7 +4,7 @@ #include #include #include -//#include +#include typedef struct Face { long double descriptor[128]; @@ -62,6 +62,7 @@ long double euclideanDistance(long double *a, long double *b) { } int main(int argc, char *argv[]) { + int len = 0; int i; Face *pChain = NULL; @@ -107,9 +108,6 @@ int main(int argc, char *argv[]) { fprintf(stderr, "Read %d face descriptors...\n", len); - printf("DELETE FROM facedistances;\n"); - printf("BEGIN TRANSACTION;\n"); - /* Allocate storage for all distances */ Face *pLink = pChain; while (pLink) { @@ -117,6 +115,33 @@ int main(int argc, char *argv[]) { pLink = pLink->next; } + sqlite3 *db; + + int rc = sqlite3_open("db/photos.db", &db); + if (rc != SQLITE_OK) { + fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return 1; + } + + fprintf(stderr, "DB opened."); + + char *err_msg = NULL; + char *sql = + "DELETE FROM facedistances;" + "BEGIN TRANSACTION;"; + + rc = sqlite3_exec(db, sql, 0, 0, &err_msg); + if (rc != SQLITE_OK ) { + fprintf(stderr, "SQL error: %s\n", err_msg); + sqlite3_free(err_msg); + sqlite3_close(db); + return 1; + } + + fprintf(stderr, "facedistances deleted and transaction started.\n"); + + char sqlBuf[1024]; pLink = pChain; int sourceIndex = 0, lines = 0; while (pLink) { @@ -131,10 +156,17 @@ int main(int argc, char *argv[]) { pLink->distances[targetIndex] = pTarget->distances[sourceIndex] = euclideanDistance(pLink->descriptor, pTarget->descriptor); if (pLink->distances[targetIndex] < 0.5) { - printf("INSERT INTO facedistances (face1Id,face2Id,distance) VALUES (%d,%d,%Lf);\n", + sprintf(sqlBuf, "INSERT INTO facedistances (face1Id,face2Id,distance) VALUES (%d,%d,%Lf);", ((pLink->faceId < pTarget->faceId) ? pLink->faceId : pTarget->faceId), ((pLink->faceId < pTarget->faceId) ? pTarget->faceId : pLink->faceId), pLink->distances[targetIndex]); + rc = sqlite3_exec(db, sqlBuf, 0, 0, &err_msg); + if (rc != SQLITE_OK ) { + fprintf(stderr, "SQL error: %s\n", err_msg); + sqlite3_free(err_msg); + sqlite3_close(db); + return 1; + } lines++; if (lines % 1000 == 0) { fprintf(stderr, "...output %d DB lines (%0.2f complete)...\n", lines, (float)(1. * sourceIndex / (1. * len))); @@ -148,18 +180,15 @@ int main(int argc, char *argv[]) { pLink = pLink->next; sourceIndex++; } - printf("COMMIT;\n"); -/* - sqlite3 *db; - sqlite3_stmt *res; - - int rc = sqlite3_open("db/photos.db", &db); - if (rc != SQLITE_OK) { - fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db)); + rc = sqlite3_exec(db, "COMMIT;", 0, 0, &err_msg); + if (rc != SQLITE_OK ) { + fprintf(stderr, "SQL error: %s\n", err_msg); + sqlite3_free(err_msg); sqlite3_close(db); return 1; - } + } + sqlite3_close(db); -*/ + return 0; } \ No newline at end of file