From 96f4eae4107b8d6f289ebcb6758538608d03097c Mon Sep 17 00:00:00 2001 From: dtookey Date: Thu, 5 May 2022 16:24:30 -0400 Subject: [PATCH] SQL scripts that mostly handle the administration of databases and tables has been moved into database-primitives.go, and executed via the "runner" pattern that we came up with. --- src/mercury.go | 10 +++--- src/mercury/Interconnect.go | 4 ++- src/projectClarity/clarity-database.go | 6 ++-- src/projectInsight/insight-database.go | 20 +++--------- src/sql/create-any-database.sql | 3 ++ .../create-mercury-picturePatterns-table.sql | 22 +++++++++++++ src/util/database-primitives.go | 32 +++++++++++++++++-- 7 files changed, 67 insertions(+), 30 deletions(-) create mode 100644 src/sql/create-any-database.sql create mode 100644 src/sql/create-mercury-picturePatterns-table.sql diff --git a/src/mercury.go b/src/mercury.go index b66c100..ed5da81 100644 --- a/src/mercury.go +++ b/src/mercury.go @@ -11,12 +11,11 @@ import ( func main() { s := time.Now() - //icx := insight.NewInsightConnect() - //icx.InsightDBConnector.ExecuteSqlScript("insight", "create-insight-contribution-table.sql") - //processQbBilling() - //updateInsightData() - test() + updateInsightData() + + //test() + f := time.Now() log.Println(f.Sub(s).Milliseconds()) @@ -32,7 +31,6 @@ func test() { func updateInsightData() { icx := mercury.NewInterconnect() - icx.ResetTables() icx.UpdateUsers() icx.UpdateTimeEntries() } diff --git a/src/mercury/Interconnect.go b/src/mercury/Interconnect.go index 6ab9176..67f36c7 100644 --- a/src/mercury/Interconnect.go +++ b/src/mercury/Interconnect.go @@ -3,6 +3,7 @@ package mercury import ( "log" "mercury/src/projectInsight" + "mercury/src/util" "time" ) @@ -20,6 +21,7 @@ func NewInterconnect() *Interconnect { connect := Interconnect{} connect.Client = projectInsight.NewIClient() connect.InsightDBConnector = projectInsight.NewDBConnection() + connect.InsightDBConnector.DBConnectorGeneric.CreateTables() return &connect } @@ -50,7 +52,7 @@ func (ic *Interconnect) UpdateTimeEntries() { coroutineCount-- log.Printf("Currently pending goroutines: %d\n", coroutineCount) } - ic.InsightDBConnector.ExecuteSqlScript("insight", "create-insight-contribution-table.sql") + ic.InsightDBConnector.ExecuteSqlScript(util.NewRunner("insight", "create-insight-contribution-table.sql")) } // diff --git a/src/projectClarity/clarity-database.go b/src/projectClarity/clarity-database.go index 2f2ffa3..a64c26b 100644 --- a/src/projectClarity/clarity-database.go +++ b/src/projectClarity/clarity-database.go @@ -7,9 +7,7 @@ import ( "time" ) -const ( - ClarityDatabaseName = "projects" -) +const () type ( ClarityLifeCycleEvent struct { @@ -49,7 +47,7 @@ func (cdb *clarityDatabase) GetLifecycleEvents() *[]*ClarityLifeCycleEvent { } return &container } - return util.QueryForObjects[ClarityLifeCycleEvent](cdb.DBConnectorGeneric, ClarityDatabaseName, "read-clarity-lifecycleEvents.sql", cb) + return util.QueryForObjects[ClarityLifeCycleEvent](cdb.DBConnectorGeneric, util.ClarityDatabaseName, "read-clarity-lifecycleEvents.sql", cb) } // diff --git a/src/projectInsight/insight-database.go b/src/projectInsight/insight-database.go index f91d625..2414431 100644 --- a/src/projectInsight/insight-database.go +++ b/src/projectInsight/insight-database.go @@ -7,10 +7,6 @@ import ( "mercury/src/util" ) -const ( - InsightDatabaseName = "insight" -) - var ( insightUserMappingFunction = func(rows *sql.Rows) *InsightUser { user := InsightUser{} @@ -58,18 +54,10 @@ func NewDBConnection() *InsightDBConnector { return &InsightDBConnector{&dbGeneric} } -func (c *InsightDBConnector) CreateTables() { - tableCreationScripts := []string{"create-insight-user-table.sql", "create-insight-timeEntry-table.sql"} - - for _, scriptName := range tableCreationScripts { - c.ExecuteSqlScript(InsightDatabaseName, scriptName) - } -} - func (c *InsightDBConnector) UpdateTimeEntries(entries *[]*InsightTimeEntry) { util.BulkUpdate[InsightTimeEntry]( c.DBConnectorGeneric, - InsightDatabaseName, + util.InsightDatabaseName, "update-insight-timeEntry.sql", entries, insightTimeEntryUpdateFunction, @@ -79,7 +67,7 @@ func (c *InsightDBConnector) UpdateTimeEntries(entries *[]*InsightTimeEntry) { func (c *InsightDBConnector) UpdateUsers(users *[]*InsightUser) { util.BulkUpdate[InsightUser]( c.DBConnectorGeneric, - InsightDatabaseName, + util.InsightDatabaseName, "update-insight-users.sql", users, insightUserUpdateFunction, @@ -89,7 +77,7 @@ func (c *InsightDBConnector) UpdateUsers(users *[]*InsightUser) { func (c *InsightDBConnector) ReadUsers() *[]*InsightUser { return util.QueryForObjects[InsightUser]( c.DBConnectorGeneric, - InsightDatabaseName, + util.InsightDatabaseName, "read-insight-allUsers.sql", insightUserMappingFunction, ) @@ -98,7 +86,7 @@ func (c *InsightDBConnector) ReadUsers() *[]*InsightUser { func (c *InsightDBConnector) ReadEngineerUsers() *[]*InsightUser { return util.QueryForObjects[InsightUser]( c.DBConnectorGeneric, - InsightDatabaseName, + util.InsightDatabaseName, "read-insight-engineerUsers.sql", insightUserMappingFunction, ) diff --git a/src/sql/create-any-database.sql b/src/sql/create-any-database.sql new file mode 100644 index 0000000..fad2cf9 --- /dev/null +++ b/src/sql/create-any-database.sql @@ -0,0 +1,3 @@ +CREATE DATABASE IF NOT EXISTS mercury; +CREATE DATABASE IF NOT EXISTS insight; +CREATE DATABASE IF NOT EXISTS projects; \ No newline at end of file diff --git a/src/sql/create-mercury-picturePatterns-table.sql b/src/sql/create-mercury-picturePatterns-table.sql new file mode 100644 index 0000000..9a5ed49 --- /dev/null +++ b/src/sql/create-mercury-picturePatterns-table.sql @@ -0,0 +1,22 @@ +CREATE TABLE IF NOT EXISTS picture_patterns( + id int unique primary key auto_increment, + pattern varchar(512), + verified bool +); + +CREATE TABLE IF NOT EXISTS picture_samples( + id int unique primary key auto_increment, + fileName varchar(512), + verified bool +); + +CREATE TABLE IF NOT EXISTS picture_timestamps( + id int unique primary key auto_increment, + project_name varchar(15), + file_name varchar(512), + time_stamp_taken datetime, + time_stamp_uploaded datetime, + uploader_id int default -1 +); + +CREATE INDEX IF NOT EXISTS picture_timestamps_refnum on picture_timestamps (project_name); diff --git a/src/util/database-primitives.go b/src/util/database-primitives.go index 01517cb..005c677 100644 --- a/src/util/database-primitives.go +++ b/src/util/database-primitives.go @@ -13,6 +13,10 @@ const ( dbCredsEnvName = "DB_CREDS" dbCredsHostName = "DB_HOST" dsnTemplate = "clarity:%s@tcp(%s)/%s?parseTime=true" + + ClarityDatabaseName = "projects" + InsightDatabaseName = "insight" + MercuryDatabaseName = "mercury" ) // @@ -24,10 +28,15 @@ type DBConnectorGeneric struct { cachedConnection *sql.DB } -func (c *DBConnectorGeneric) ExecuteSqlScript(database string, scriptName string) { - c.startConnection(database) +type sqlScriptRunner struct { + ScriptName string + DatabaseName string +} + +func (c *DBConnectorGeneric) ExecuteSqlScript(runner *sqlScriptRunner) { + c.startConnection(runner.DatabaseName) defer c.returnConnection() - queryWhole := *loadSqlFile(scriptName) + queryWhole := *loadSqlFile(runner.ScriptName) queryParts := strings.Split(queryWhole, ";") log.Printf("\n=============================================\n%s\n==============================================\n", queryWhole) @@ -68,6 +77,19 @@ func (c *DBConnectorGeneric) QueryFromScript(scriptName string) *sql.Rows { return rows } +func (c *DBConnectorGeneric) CreateTables() { + tableCreationRunners := []*sqlScriptRunner{ + NewRunner("create-any-database.sql", ""), + NewRunner("create-insight-user-table.sql", InsightDatabaseName), + NewRunner("create-insight-timeEntry-table.sql", InsightDatabaseName), + NewRunner("create-mercury-picturePatterns-table.sql", MercuryDatabaseName), + } + + for _, runner := range tableCreationRunners { + c.ExecuteSqlScript(runner) + } +} + // // @@ -130,4 +152,8 @@ func BulkUpdate[K any](db *DBConnectorGeneric, dbName string, updateScript strin } +func NewRunner(scriptName string, databaseName string) *sqlScriptRunner { + return &sqlScriptRunner{scriptName, databaseName} +} + //