From 4d37a3e58b871871d72f03fd5e827c5cadb375dc Mon Sep 17 00:00:00 2001 From: swrup Date: Tue, 11 Nov 2025 10:03:07 +0100 Subject: [PATCH] JJ: Description from the destination commit: cp sql/ from GNU Taler exchange JJ: Description from source commit: add sql Makefile --- .gitignore | 2 + include/sql/Makefile | 87 ++++++++++++++++++++++++++++++++++ include/sql/exchangedb.version | 1 + src/database.ml | 2 + src/mte.ml | 3 +- 5 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 include/sql/Makefile create mode 100644 include/sql/exchangedb.version diff --git a/.gitignore b/.gitignore index e35d8850..29a515cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ _build +include/sql/*.sql +include/sql/*.sql.in diff --git a/include/sql/Makefile b/include/sql/Makefile new file mode 100644 index 00000000..61a9eb0f --- /dev/null +++ b/include/sql/Makefile @@ -0,0 +1,87 @@ +# TODO +# - make test +# - PostgreSQL configuration (host, port, username, password, ..) +# - gitsubmodules? + +# usage: +# `make create_database` +# create a `taler-exchange` database +# `make fetch_source` +# fetch all *.sql and *.sql.in files from GNU Taler exchange repository (latest commit) +# file `exchangedb.version` contains hash of latest commit that changed +# something in exchange/src/exchangedb +# `make init` +# initialize taler-exchange database (create tables, ...) +# `taler-exchange` database must already be created +fetch_source: + git clone https://git.taler.net/exchange.git/ ./exchange + cp ./exchange/src/exchangedb/*.sql ./ + cp ./exchange/src/exchangedb/*.sql.in ./ + git -C ./exchange log -n 1 --pretty=format:%H ./src/exchangedb > exchangedb.version + rm -rf ./exchange + +clean_source: + rm -f ./*.sql + rm -f ./*.sql.in + +dbname := taler-exchange +sql_INIT := init.sql +sql_DROP := drop.sql + +sql_DATA := \ + versioning.sql \ + exchange-0001.sql \ + exchange-0002.sql \ + exchange-0003.sql \ + exchange-0004.sql \ + exchange-0005.sql \ + procedures.sql + +procedures.sql: procedures.sql.in exchange_do_*.sql exchange_statistics_*.sql exchange_trigger_*.sql + chmod +w $@ 2> /dev/null || true + gcc -E -P -undef - < procedures.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@ + chmod ugo-w $@ + +exchange-0002.sql: exchange-0002.sql.in 0002-*.sql + chmod +w $@ 2> /dev/null || true + gcc -E -P -undef - < exchange-0002.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@ + chmod ugo-w $@ + +exchange-0003.sql: exchange-0003.sql.in 0003-*.sql + chmod +w $@ 2> /dev/null || true + gcc -E -P -undef - < exchange-0003.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@ + chmod ugo-w $@ + +exchange-0004.sql: exchange-0004.sql.in 0004-*.sql + chmod +w $@ 2> /dev/null || true + gcc -E -P -undef - < exchange-0004.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@ + chmod ugo-w $@ + +gen_sql: procedures.sql exchange-0002.sql exchange-0003.sql exchange-0004.sql + +.DEFAULT_GOAL := gen_init +gen_init: gen_sql $(sql_DATA) + @printf "" > $(sql_INIT) + @cat $(sql_DATA) >> $(sql_INIT) + +clean: + rm -f procedures.sql + rm -f exchange-0002.sql + rm -f exchange-0003.sql + rm -f exchange-0004.sql + rm $(sql_INIT) + +# "NOTICE: function xxx() does not exist, skipping" are normal and expected +init: gen_init + psql --host=localhost --port=5432 --username=mte --password --dbname=$(dbname) --file=$(sql_INIT) + +drop: + psql --host=localhost --port=5432 --username=mte --password --dbname=$(dbname) --file=$(sql_DROP) + +create_database: + createdb --host=localhost --port=5432 --username=mte --password $(dbname) + +drop_database: + dropdb --host=localhost --port=5432 --username=mte --password $(dbname) + +reset_database: drop_database create_database diff --git a/include/sql/exchangedb.version b/include/sql/exchangedb.version new file mode 100644 index 00000000..d777ca88 --- /dev/null +++ b/include/sql/exchangedb.version @@ -0,0 +1 @@ +2305679765fb14b82512b5140ae113d9633109c8 \ No newline at end of file diff --git a/src/database.ml b/src/database.ml index bb7e5ec5..140d0082 100644 --- a/src/database.ml +++ b/src/database.ml @@ -23,3 +23,5 @@ let test req server _ = let str = Fmt.str "Database error: %a." Caqti_error.pp err in let* () = Vif.Response.with_string req str in Vif.Response.respond `Internal_server_error + +let init = test diff --git a/src/mte.ml b/src/mte.ml index 15220878..8f87a878 100644 --- a/src/mte.ml +++ b/src/mte.ml @@ -113,7 +113,8 @@ let routes = get (rel /?? nil) --> hello; get (rel / "terms" /?? nil) --> Static.terms; get (rel / "privacy" /?? nil) --> Static.privacy; get (rel / "management" / "keys" /?? nil) --> Management.keys; - get (rel / "db" /?? nil) --> Database.test; + get (rel / "db_test" /?? nil) --> Database.test; + get (rel / "db_init" /?? nil) --> Database.init; ] let () =