@@ -12,50 +12,73 @@ let db = new sqlite3.Database("server/data/db.sqlite3", (err) => {
1212
1313function checkDBSchema ( ) {
1414 //Get version of DB Schema from version table, if != to version, suggest upgrade
15- db . all ( "SELECT version from version" , function ( err , rows ) {
15+ db . all ( "SELECT * from version" , function ( err , rows ) {
1616 if ( err && err . errno == 1 ) {
1717 createDBSchema ( ) ;
1818 } else {
19- if ( rows [ 0 ] . version == global . db_schema ) {
20- logger . winston . info ( "Schema version ( " + rows [ 0 ] . version + ") matches package.json schema version ( " + global . db_schema + ")" ) ;
19+ if ( rows . length > 0 && rows [ 0 ] . version == global . db_schema ) {
20+ logger . winston . info ( "Schema version v " + rows [ 0 ] . version + " matches package.json schema version v " + global . db_schema ) ;
2121 } else {
22- logger . winston . info ( "Schema version (" + rows [ 0 ] . version + ") DOES NOT match package.json schema version (" + global . db_schema + ")" ) ;
23- logger . winston . info ( "Please upgrade your schema" ) ;
22+ var current_version = "?" ;
23+ if ( rows . length > 0 ) {
24+ current_version = rows [ 0 ] . version ;
25+ }
26+ logger . winston . info ( "Schema version v" + current_version + " DOES NOT match package.json schema version v" + global . db_schema ) ;
27+ if ( global . db_autoupdate == "true" ) {
28+ createDBSchema ( ) ;
29+ } else {
30+ logger . winston . info ( "Please upgrade your schema" ) ;
31+ }
2432 }
2533 }
2634 } ) ;
27- //
2835}
2936
30- function createDBSchema ( ) {
37+ function createDBSchema ( ) {
3138 try {
32- logger . winston . info ( "------------------------- Starting to create DB schema -------------------------" ) ;
33- db . run ( "CREATE TABLE IF NOT EXISTS version(version)" , setDBSchemaVersion ) ;
34- db . run ( "CREATE TABLE IF NOT EXISTS bots (bot_id INTEGER PRIMARY KEY AUTOINCREMENT, bot_name TEXT, bot_config TEXT, output_folder TEXT)" ) ;
35- db . run ( "CREATE TABLE IF NOT EXISTS intents (intent_id INTEGER PRIMARY KEY AUTOINCREMENT, intent_name TEXT, bot_id INTEGER)" ) ;
36- db . run ( "CREATE TABLE IF NOT EXISTS synonyms (synonym_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_reference TEXT, regex_pattern TEXT, bot_id INTEGER)" ) ;
37- db . run ( "CREATE TABLE IF NOT EXISTS entities (entity_id INTEGER PRIMARY KEY AUTOINCREMENT, entity_name TEXT, slot_data_type TEXT, bot_id INTEGER)" ) ;
38- db . run ( "CREATE TABLE IF NOT EXISTS expressions (expression_id INTEGER PRIMARY KEY AUTOINCREMENT, expression_text TEXT, intent_id INTEGER)" ) ;
39- db . run ( "CREATE TABLE IF NOT EXISTS expression_parameters (parameter_id INTEGER PRIMARY KEY AUTOINCREMENT, parameter_start INTEGER, parameter_end INTEGER, parameter_value TEXT, expression_id INTEGER, intent_id INTEGER, entity_id INTEGER)" ) ;
40- db . run ( "CREATE TABLE IF NOT EXISTS regex (regex_id INTEGER PRIMARY KEY AUTOINCREMENT, regex_name TEXT, regex_pattern TEXT, bot_id INTEGER)" ) ;
41- db . run ( "CREATE TABLE IF NOT EXISTS responses (response_id INTEGER PRIMARY KEY AUTOINCREMENT, response_text TEXT, response_type TEXT, action_id INTEGER)" ) ;
42- db . run ( "CREATE TABLE IF NOT EXISTS synonym_variants (synonym_variant_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_value TEXT, synonym_id INTEGER)" ) ;
43- db . run ( "CREATE TABLE IF NOT EXISTS nlu_log (log_id INTEGER PRIMARY KEY AUTOINCREMENT, ip_address TEXT, query TEXT, event_type TEXT, event_data TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)" ) ;
44- db . run ( "CREATE TABLE IF NOT EXISTS models (model_id INTEGER PRIMARY KEY AUTOINCREMENT, model_name TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, comment TEXT, bot_id INTEGER, local_path TEXT, server_path TEXT, server_response TEXT)" ) ;
45- db . run ( "CREATE TABLE IF NOT EXISTS actions (action_id INTEGER PRIMARY KEY AUTOINCREMENT, action_name TEXT, bot_id INTEGER)" ) ;
46- db . run ( "CREATE TABLE IF NOT EXISTS stories (story_id INTEGER PRIMARY KEY AUTOINCREMENT, story_name TEXT, story TEXT, bot_id INTEGER, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)" ) ;
39+ logger . winston . info ( "------------------------- Starting to create/update DB schema -------------------------" ) ;
40+ db . run ( "CREATE TABLE bots (bot_id INTEGER PRIMARY KEY AUTOINCREMENT, bot_name TEXT, bot_config TEXT, output_folder TEXT)" , function ( error ) { sqlOutput ( error , "bots" ) ; } ) ;
41+ db . run ( "CREATE TABLE intents (intent_id INTEGER PRIMARY KEY AUTOINCREMENT, intent_name TEXT, bot_id INTEGER)" , function ( error ) { sqlOutput ( error , "intents" ) ; } ) ;
42+ db . run ( "CREATE TABLE synonyms (synonym_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_reference TEXT, regex_pattern TEXT, bot_id INTEGER)" , function ( error ) { sqlOutput ( error , "synonyms" ) ; } ) ;
43+ db . run ( "CREATE TABLE entities (entity_id INTEGER PRIMARY KEY AUTOINCREMENT, entity_name TEXT, slot_data_type TEXT, bot_id INTEGER)" , function ( error ) { sqlOutput ( error , "entities" ) ; } ) ;
44+ db . run ( "CREATE TABLE expressions (expression_id INTEGER PRIMARY KEY AUTOINCREMENT, expression_text TEXT, intent_id INTEGER)" , function ( error ) { sqlOutput ( error , "expressions" ) ; } ) ;
45+ db . run ( "CREATE TABLE expression_parameters (parameter_id INTEGER PRIMARY KEY AUTOINCREMENT, parameter_start INTEGER, parameter_end INTEGER, parameter_value TEXT, expression_id INTEGER, intent_id INTEGER, entity_id INTEGER)" , function ( error ) { sqlOutput ( error , "expression_parameters" ) ; } ) ;
46+ db . run ( "CREATE TABLE regex (regex_id INTEGER PRIMARY KEY AUTOINCREMENT, regex_name TEXT, regex_pattern TEXT, bot_id INTEGER)" , function ( error ) { sqlOutput ( error , "regex" ) ; } ) ;
47+ db . run ( "CREATE TABLE responses (response_id INTEGER PRIMARY KEY AUTOINCREMENT, response_text TEXT, response_type TEXT, action_id INTEGER)" , function ( error ) { sqlOutput ( error , "responses" ) ; } ) ;
48+ db . run ( "CREATE TABLE synonym_variants (synonym_variant_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_value TEXT, synonym_id INTEGER)" , function ( error ) { sqlOutput ( error , "synonym_variants" ) ; } ) ;
49+ db . run ( "CREATE TABLE nlu_log (log_id INTEGER PRIMARY KEY AUTOINCREMENT, ip_address TEXT, query TEXT, event_type TEXT, event_data TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)" , function ( error ) { sqlOutput ( error , "nlu_log" ) ; } ) ;
50+ db . run ( "CREATE TABLE models (model_id INTEGER PRIMARY KEY AUTOINCREMENT, model_name TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, comment TEXT, bot_id INTEGER, local_path TEXT, server_path TEXT, server_response TEXT)" , function ( error ) { sqlOutput ( error , "models" ) ; } ) ;
51+ db . run ( "CREATE TABLE actions (action_id INTEGER PRIMARY KEY AUTOINCREMENT, action_name TEXT, bot_id INTEGER)" , function ( error ) { sqlOutput ( error , "actions" ) ; } ) ;
52+ db . run ( "CREATE TABLE stories (story_id INTEGER PRIMARY KEY AUTOINCREMENT, story_name TEXT, story TEXT, bot_id INTEGER, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)" , function ( error ) { sqlOutput ( error , "stories" ) ; } ) ;
4753
48- db . run ( "CREATE TABLE IF NOT EXISTS settings (setting_name TEXT, setting_value TEXT)" , function ( ) {
54+ db . run ( "CREATE TABLE settings (setting_name TEXT, setting_value TEXT)" , function ( error ) {
55+ sqlOutput ( error , "settings" ) ;
4956 db . run ( "INSERT into settings (setting_name, setting_value) values ('refresh_time', '60000')" ) ;
5057 } ) ;
58+
59+ //New table part of Version 3.0.1
60+ db . run ( "CREATE TABLE conversations (conversation_id INTEGER PRIMARY KEY AUTOINCREMENT, ip_address TEXT, conversation TEXT, story TEXT, bot_id INTEGER, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)" , function ( error ) { sqlOutput ( error , "conversations" ) ; } ) ;
61+
62+ db . run ( "CREATE TABLE version(version)" , function ( error ) { setDBSchemaVersion ( error ) ; } ) ;
5163 } catch ( err ) {
5264 console . log ( err ) ;
5365 }
5466}
5567
56- function setDBSchemaVersion ( ) {
57- db . run ( "INSERT into version (version) values (?)" , global . db_schema ) ;
58- logger . winston . info ( "Database Schema v" + global . db_schema + " created" ) ;
68+ function sqlOutput ( error , table_name ) {
69+ if ( ! error ) {
70+ logger . winston . info ( "Table: " + table_name + " created" ) ;
71+ }
72+ }
73+
74+ function setDBSchemaVersion ( error ) {
75+ if ( error ) {
76+ db . run ( "UPDATE version set version = ?" , global . db_schema ) ;
77+ logger . winston . info ( "Database Schema updated to v" + global . db_schema + " " ) ;
78+ } else {
79+ db . run ( "INSERT into version (version) values (?)" , global . db_schema ) ;
80+ logger . winston . info ( "Database Schema v" + global . db_schema + " created" ) ;
81+ }
5982}
6083
6184module . exports = db ;
0 commit comments