diff --git a/src/input/readers/SQLite.h b/src/input/readers/SQLite.h index 0705ba2df0..c00f1197bf 100644 --- a/src/input/readers/SQLite.h +++ b/src/input/readers/SQLite.h @@ -27,7 +27,7 @@ public: static ReaderBackend* Instantiate(ReaderFrontend* frontend) { return new SQLite(frontend); } protected: - virtual bool DoInit(const ReaderInfo& info, int arg_num_fields, const threading::Field* const* fields); + virtual bool DoInit(const ReaderInfo& info, int arg_num_fields, const threading::Field* const* arg_fields); virtual void DoClose(); diff --git a/src/logging/writers/SQLite.cc b/src/logging/writers/SQLite.cc index cf4be92e14..c529fbfe3c 100644 --- a/src/logging/writers/SQLite.cc +++ b/src/logging/writers/SQLite.cc @@ -109,14 +109,17 @@ bool SQLite::checkError( int code ) return false; } -bool SQLite::DoInit(const WriterInfo& info, int num_fields, - const Field* const * fields) +bool SQLite::DoInit(const WriterInfo& info, int arg_num_fields, + const Field* const * arg_fields) { if ( sqlite3_threadsafe() == 0 ) { Error("SQLite reports that it is not threadsafe. Bro needs a threadsafe version of SQLite. Aborting"); return false; } + + num_fields = arg_num_fields; + fields = arg_fields; string fullpath(info.path); fullpath.append(".sqlite"); @@ -300,7 +303,7 @@ int SQLite::AddParams(Value* val, int pos) if ( j > 0 ) desc.AddRaw(set_separator); - io->Describe(&desc, val->val.set_val.vals[j], NULL); + io->Describe(&desc, val->val.set_val.vals[j], fields[pos]->name); // yes, giving NULL here is not really really pretty.... // it works however, because tables cannot contain tables... // or vectors. @@ -320,7 +323,7 @@ int SQLite::AddParams(Value* val, int pos) if ( j > 0 ) desc.AddRaw(set_separator); - io->Describe(&desc, val->val.vector_val.vals[j], NULL); + io->Describe(&desc, val->val.vector_val.vals[j], fields[pos]->name); } desc.RemoveEscapeSequence(set_separator); diff --git a/src/logging/writers/SQLite.h b/src/logging/writers/SQLite.h index 8c04c52c41..e5444a89b9 100644 --- a/src/logging/writers/SQLite.h +++ b/src/logging/writers/SQLite.h @@ -25,8 +25,8 @@ public: { return new SQLite(frontend); } protected: - virtual bool DoInit(const WriterInfo& info, int num_fields, - const threading::Field* const* fields); + virtual bool DoInit(const WriterInfo& info, int arg_num_fields, + const threading::Field* const* arg_fields); virtual bool DoWrite(int num_fields, const threading::Field* const* fields, threading::Value** vals); virtual bool DoSetBuf(bool enabled) { return true; } @@ -43,6 +43,9 @@ private: string GetTableType(int, int); char* FS(const char* format, ...); + const threading::Field* const * fields; // raw mapping + unsigned int num_fields; + sqlite3 *db; sqlite3_stmt *st;