package debug_mode import ( _ "github.com/mattn/go-sqlite3" "github.com/jmoiron/sqlx" "github.com/rs/zerolog/log" ) func Init_testdb(DB_TYPE string, DB_CONNECTION_STRING string) { db, err := sqlx.Connect(DB_TYPE, DB_CONNECTION_STRING) if err != nil { log.Fatal(). Err(err). Msg("Couldn't open test db") } defer db.Close() init_sql := ` CREATE TABLE accounts ( acnt_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY, acnt_dsply_name varchar(50) NOT NULL, acnt_description varchar(250) NULL, CONSTRAINT accounts_pkey PRIMARY KEY (acnt_id) ); CREATE TABLE buckets ( bkt_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY, bkt_dsply_code varchar(5) NOT NULL, bkt_dsply_name varchar(50) NULL, bkt_description varchar(250) NULL, CONSTRAINT buckets_pkey PRIMARY KEY (bkt_id) ); CREATE TABLE transaction_breakdown ( trns_brkdwn_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY, trns_brkdwn_amount money NOT NULL, trns_brkdwn_parent_transaction int4 NOT NULL, trns_brkdwn_catagory int4 NULL, trns_brkdwn_bucket int4 NULL, CONSTRAINT transaction_breakdown_pkey PRIMARY KEY (trns_brkdwn_id) ); alter table transaction_breakdown add constraint transaction_breakdown_parent_transaction_fkey foreign key (trns_brkdwn_parent_transaction) references transactions(trns_id); alter table transaction_breakdown add constraint transaction_breakdown_catagory_fkey foreign key (trns_brkdwn_catagory) references transaction_categories(trns_ctgry_id); alter table transaction_breakdown add constraint transaction_breakdown_bucket_fkey foreign key (trns_brkdwn_bucket) references buckets(bkt_id); CREATE TABLE transactions ( trns_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY, trns_amount money NOT NULL, trns_description varchar(250) NULL, trns_account int4 NOT NULL, trns_bucket int4 NULL, trns_date Date not null, CONSTRAINT transactions_pkey PRIMARY KEY (trns_id) ); ALTER TABLE transactions ADD CONSTRAINT transactions_trns_account_fkey FOREIGN KEY (trns_account) REFERENCES accounts(acnt_id); ALTER TABLE transactions ADD CONSTRAINT transactions_trns_bucket_fkey FOREIGN KEY (trns_bucket) REFERENCES buckets(bkt_id) ON DELETE SET NULL; CREATE TABLE transaction_categories ( trns_ctgry_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY, trns_ctgry_dsply_code varchar(5) NOT NULL, trns_ctgry_dsply_name varchar(50) NOT NULL, trns_ctgry_description varchar(250) NULL, CONSTRAINT transaction_categories_pkey PRIMARY KEY (trns_ctgry_id) ); -- transaction_breakdown foreign keys ALTER TABLE transaction_breakdown ADD CONSTRAINT transaction_breakdown_trns_brkdwn_catagory_fkey FOREIGN KEY (trns_brkdwn_catagory) REFERENCES transaction_categories(trns_ctgry_id) ON DELETE SET NULL; ALTER TABLE transaction_breakdown ADD CONSTRAINT transaction_breakdown_trns_brkdwn_parent_transaction_fkey FOREIGN KEY (trns_brkdwn_parent_transaction) REFERENCES transactions(trns_id) ON DELETE CASCADE; ALTER TABLE transaction_breakdown ADD CONSTRAINT transaction_breakdown_trns_brkdwn_bucket_fkey FOREIGN KEY (trns_brkdwn_bucket) REFERENCES buckets(bkt_id) ON DELETE SET NULL; ` tx := db.MustBegin() tx.MustExec(init_sql) err = tx.Commit() if err != nil { log.Fatal(). Err(err). Msg("Could not commit transaction") } log.Debug().Msg("Test database initialized") }