summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sql/ddl/mysql.sql64
-rw-r--r--sql/ddl/sqlite.sql64
-rw-r--r--sql/sexps.sql4
-rw-r--r--sql/users.sql8
-rw-r--r--sqlc.yaml25
-rw-r--r--sqlite.go9
-rw-r--r--sqlite_win.go9
7 files changed, 183 insertions, 0 deletions
diff --git a/sql/ddl/mysql.sql b/sql/ddl/mysql.sql
new file mode 100644
index 0000000..47315f9
--- /dev/null
+++ b/sql/ddl/mysql.sql
@@ -0,0 +1,64 @@
+create table users
+(
+ id INTEGER not null
+ primary key,
+ name VARCHAR(50) not null
+ unique,
+ pwd VARCHAR(255) not null,
+ description VARCHAR(100)
+);
+
+create table categories
+(
+ id INTEGER not null
+ primary key,
+ name VARCHAR(50) not null,
+ parent_id INTEGER
+ references categories,
+ user_id INTEGER not null
+ references users
+);
+
+create table const_expenses
+(
+ id INTEGER not null
+ primary key,
+ description VARCHAR(50),
+ expense NUMERIC(10, 2) not null,
+ months SMALLINT not null,
+ start DATE not null,
+ end DATE not null,
+ prev_id INTEGER
+ references const_expenses,
+ user_id INTEGER not null
+ references users,
+ category_id INTEGER not null
+ references categories
+);
+
+create index idx_start_end
+ on const_expenses (user_id, start, end);
+
+create index ix_constexpense_end
+ on const_expenses (end);
+
+create index ix_constexpense_start
+ on const_expenses (start);
+
+create table single_expenses
+(
+ id INTEGER not null
+ primary key,
+ description VARCHAR(50),
+ expense NUMERIC(10, 2) not null,
+ year INTEGER not null,
+ month SMALLINT not null,
+ day SMALLINT not null,
+ user_id INTEGER not null
+ references users,
+ category_id INTEGER not null
+ references categories
+);
+
+create index idx_single_date
+ on single_expenses (user_id, year, month);
diff --git a/sql/ddl/sqlite.sql b/sql/ddl/sqlite.sql
new file mode 100644
index 0000000..47315f9
--- /dev/null
+++ b/sql/ddl/sqlite.sql
@@ -0,0 +1,64 @@
+create table users
+(
+ id INTEGER not null
+ primary key,
+ name VARCHAR(50) not null
+ unique,
+ pwd VARCHAR(255) not null,
+ description VARCHAR(100)
+);
+
+create table categories
+(
+ id INTEGER not null
+ primary key,
+ name VARCHAR(50) not null,
+ parent_id INTEGER
+ references categories,
+ user_id INTEGER not null
+ references users
+);
+
+create table const_expenses
+(
+ id INTEGER not null
+ primary key,
+ description VARCHAR(50),
+ expense NUMERIC(10, 2) not null,
+ months SMALLINT not null,
+ start DATE not null,
+ end DATE not null,
+ prev_id INTEGER
+ references const_expenses,
+ user_id INTEGER not null
+ references users,
+ category_id INTEGER not null
+ references categories
+);
+
+create index idx_start_end
+ on const_expenses (user_id, start, end);
+
+create index ix_constexpense_end
+ on const_expenses (end);
+
+create index ix_constexpense_start
+ on const_expenses (start);
+
+create table single_expenses
+(
+ id INTEGER not null
+ primary key,
+ description VARCHAR(50),
+ expense NUMERIC(10, 2) not null,
+ year INTEGER not null,
+ month SMALLINT not null,
+ day SMALLINT not null,
+ user_id INTEGER not null
+ references users,
+ category_id INTEGER not null
+ references categories
+);
+
+create index idx_single_date
+ on single_expenses (user_id, year, month);
diff --git a/sql/sexps.sql b/sql/sexps.sql
new file mode 100644
index 0000000..ae387ee
--- /dev/null
+++ b/sql/sexps.sql
@@ -0,0 +1,4 @@
+-- name: GetSingleExpenses :many
+SELECT id, description
+ FROM single_expenses
+ WHERE user_id = ?; \ No newline at end of file
diff --git a/sql/users.sql b/sql/users.sql
new file mode 100644
index 0000000..d16492a
--- /dev/null
+++ b/sql/users.sql
@@ -0,0 +1,8 @@
+-- name: GetUsers :many
+SELECT *
+ FROM users;
+
+-- name: GetUser :one
+SELECT *
+ FROM users
+ WHERE name = ?; \ No newline at end of file
diff --git a/sqlc.yaml b/sqlc.yaml
new file mode 100644
index 0000000..2ada86d
--- /dev/null
+++ b/sqlc.yaml
@@ -0,0 +1,25 @@
+version: "2"
+sql:
+ - engine: "sqlite"
+ queries: "sql/*.sql"
+ schema: "sql/ddl/sqlite.sql"
+ gen:
+ go:
+ out: "model"
+ emit_sql_as_comment: true
+ build_tags: "sqlite"
+ output_db_file_name: "db_sqlite.go"
+ output_models_file_name: "models_sqlite.go"
+ output_files_suffix: ".sqlite"
+
+ - engine: "mysql"
+ queries: "sql/*.sql"
+ schema: "sql/ddl/mysql.sql"
+ gen:
+ go:
+ out: "model"
+ emit_sql_as_comment: true
+ build_tags: "!sqlite"
+ output_db_file_name: "db_mysql.go"
+ output_models_file_name: "models_mysql.go"
+ output_files_suffix: ".mysql" \ No newline at end of file
diff --git a/sqlite.go b/sqlite.go
new file mode 100644
index 0000000..cf65cb2
--- /dev/null
+++ b/sqlite.go
@@ -0,0 +1,9 @@
+//go:build sqlite && !windows
+
+package main
+
+import (
+ _ "github.com/mattn/go-sqlite3"
+)
+
+const driverName = "sqlite3"
diff --git a/sqlite_win.go b/sqlite_win.go
new file mode 100644
index 0000000..f01541a
--- /dev/null
+++ b/sqlite_win.go
@@ -0,0 +1,9 @@
+//go:build sqlite && windows
+
+package main
+
+import (
+ _ "modernc.org/sqlite"
+)
+
+const driverName = "sqlite"