diff --git a/scripts/base/frameworks/input/__load__.bro b/scripts/base/frameworks/input/__load__.bro index 0e7d8ffb73..ab7c289fcf 100644 --- a/scripts/base/frameworks/input/__load__.bro +++ b/scripts/base/frameworks/input/__load__.bro @@ -2,4 +2,4 @@ @load ./readers/ascii @load ./readers/raw @load ./readers/benchmark - +@load ./readers/sqlite diff --git a/scripts/base/frameworks/logging/writers/sqlite.bro b/scripts/base/frameworks/logging/writers/sqlite.bro index 654af93c96..d835d10151 100644 --- a/scripts/base/frameworks/logging/writers/sqlite.bro +++ b/scripts/base/frameworks/logging/writers/sqlite.bro @@ -9,5 +9,9 @@ export { ## String to use for an unset &optional field. const unset_field = Log::unset_field &redef; + + ## String to use for empty fields. This should be different from + ## *unset_field* to make the output non-ambigious. + const empty_field = Log::empty_field &redef; } diff --git a/src/input.bif b/src/input.bif index 199b665fa6..bb2ee9a58b 100644 --- a/src/input.bif +++ b/src/input.bif @@ -57,3 +57,8 @@ const autospread: double; const addfactor: count; const stopspreadat: count; const timedspread: double; + +module InputSQLite; +const set_separator: string; +const unset_field: string; +const empty_field: string; diff --git a/src/input/readers/SQLite.cc b/src/input/readers/SQLite.cc index 8821d1a8a2..f843accced 100644 --- a/src/input/readers/SQLite.cc +++ b/src/input/readers/SQLite.cc @@ -22,7 +22,17 @@ using threading::Field; SQLite::SQLite(ReaderFrontend *frontend) : ReaderBackend(frontend) { - io = new AsciiInputOutput(this, AsciiInputOutput::SeparatorInfo()); + set_separator.assign( + (const char*) BifConst::LogSQLite::set_separator->Bytes(), + BifConst::InputSQLite::set_separator->Len() + ); + + unset_field.assign( + (const char*) BifConst::LogSQLite::unset_field->Bytes(), + BifConst::InputSQLite::unset_field->Len() + ); + + io = new AsciiInputOutput(this, AsciiInputOutput::SeparatorInfo(set_separator, unset_field)); } SQLite::~SQLite() diff --git a/src/input/readers/SQLite.h b/src/input/readers/SQLite.h index 6ab6bb9c58..aa7f9686c7 100644 --- a/src/input/readers/SQLite.h +++ b/src/input/readers/SQLite.h @@ -47,6 +47,9 @@ private: sqlite3 *db; sqlite3_stmt *st; AsciiInputOutput* io; + + string set_separator; + string unset_field; }; diff --git a/src/logging.bif b/src/logging.bif index 93317e242d..f7684b7216 100644 --- a/src/logging.bif +++ b/src/logging.bif @@ -87,6 +87,7 @@ const num_threads: count; module LogSQLite; const set_separator: string; +const empty_field: string; const unset_field: string; # Options for the ElasticSearch writer. diff --git a/src/logging/writers/SQLite.cc b/src/logging/writers/SQLite.cc index dc58688994..eaa20da466 100644 --- a/src/logging/writers/SQLite.cc +++ b/src/logging/writers/SQLite.cc @@ -30,9 +30,14 @@ SQLite::SQLite(WriterFrontend* frontend) : WriterBackend(frontend) BifConst::LogAscii::unset_field->Len() ); + empty_field.assign( + (const char*) BifConst::LogAscii::empty_field->Bytes(), + BifConst::LogAscii::empty_field->Len() + ); + db = 0; - io = new AsciiInputOutput(this, AsciiInputOutput::SeparatorInfo(set_separator, unset_field)); + io = new AsciiInputOutput(this, AsciiInputOutput::SeparatorInfo(set_separator, unset_field, empty_field)); } SQLite::~SQLite() @@ -134,7 +139,7 @@ bool SQLite::DoInit(const WriterInfo& info, int num_fields, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | - SQLITE_OPEN_FULLMUTEX // perhaps change to nomutex + SQLITE_OPEN_NOMUTEX // perhaps change to nomutex , NULL)) ) return false; diff --git a/src/logging/writers/SQLite.h b/src/logging/writers/SQLite.h index 2300144063..f430057ed8 100644 --- a/src/logging/writers/SQLite.h +++ b/src/logging/writers/SQLite.h @@ -46,9 +46,9 @@ private: sqlite3 *db; sqlite3_stmt *st; - string separator; string set_separator; string unset_field; + string empty_field; AsciiInputOutput* io; }; diff --git a/testing/btest/scripts/base/frameworks/input/sqlite/basic.bro b/testing/btest/scripts/base/frameworks/input/sqlite/basic.bro index 39ff448b7d..06b121be51 100644 --- a/testing/btest/scripts/base/frameworks/input/sqlite/basic.bro +++ b/testing/btest/scripts/base/frameworks/input/sqlite/basic.bro @@ -86,7 +86,6 @@ event bro_init() }; outfile = open("../out"); - # first read in the old stuff into the table... Input::add_event([$source="../conn", $name="conn", $fields=Conn::Info, $ev=line, $want_record=T, $reader=Input::READER_SQLITE, $config=config_strings]); } diff --git a/testing/btest/scripts/base/frameworks/input/sqlite/port.bro b/testing/btest/scripts/base/frameworks/input/sqlite/port.bro index 5cdc9a9d76..4501f28b2b 100644 --- a/testing/btest/scripts/base/frameworks/input/sqlite/port.bro +++ b/testing/btest/scripts/base/frameworks/input/sqlite/port.bro @@ -36,7 +36,6 @@ event bro_init() }; outfile = open("../out"); - # first read in the old stuff into the table... Input::add_event([$source="../port", $name="port", $fields=Val, $ev=line, $reader=Input::READER_SQLITE, $want_record=F, $config=config_strings]); }