This commit is contained in:
Simon Petit 2024-12-11 08:34:53 +01:00
commit 59d81cb4d7
51 changed files with 352 additions and 0 deletions

BIN
_build/.db Normal file

Binary file not shown.

BIN
_build/.digest-db Normal file

Binary file not shown.

1
_build/.filesystem-clock Normal file
View File

@ -0,0 +1 @@
<dummy>

0
_build/.lock Normal file
View File

View File

@ -0,0 +1 @@
Escaping the Dune sandbox

View File

@ -0,0 +1,2 @@
(ocamlc /usr/bin/ocamlc.opt)
(ocaml_config_vars (afl_instrument false) (architecture amd64) (asm x86_64-linux-gnu-as) (asm_cfi_supported true) (ast_impl_magic_number Caml1999M030) (ast_intf_magic_number Caml1999N030) (bytecomp_c_compiler "x86_64-linux-gnu-gcc -O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -g -O2 -ffile-prefix-map=/build/ocaml-SC7b9w/ocaml-4.13.1=. -fstack-protector-strong -Wformat -Werror=format-security -D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2") (bytecomp_c_libraries "-lm -lpthread") (c_compiler x86_64-linux-gnu-gcc) (ccomp_type cc) (cma_magic_number Caml1999A030) (cmi_magic_number Caml1999I030) (cmo_magic_number Caml1999O030) (cmt_magic_number Caml1999T030) (cmx_magic_number Caml1999Y030) (cmxa_magic_number Caml1999Z030) (cmxs_magic_number Caml1999D030) (default_executable_name a.out) (default_safe_string true) (exec_magic_number Caml1999X030) (ext_asm .s) (ext_dll .so) (ext_exe "") (ext_lib .a) (ext_obj .o) (flambda false) (flat_float_array true) (function_sections true) (host x86_64-pc-linux-gnu) (int_size 63) (linear_magic_number Caml1999L030) (model default) (native_c_compiler "x86_64-linux-gnu-gcc -O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -g -O2 -ffile-prefix-map=/build/ocaml-SC7b9w/ocaml-4.13.1=. -fstack-protector-strong -Wformat -Werror=format-security -D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2") (native_c_libraries "-lm ") (native_pack_linker "x86_64-linux-gnu-ld -r -o ") (ocamlc_cflags "-O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -g -O2 -ffile-prefix-map=/build/ocaml-SC7b9w/ocaml-4.13.1=. -fstack-protector-strong -Wformat -Werror=format-security") (ocamlc_cppflags "-D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2") (ocamlopt_cflags "-O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -g -O2 -ffile-prefix-map=/build/ocaml-SC7b9w/ocaml-4.13.1=. -fstack-protector-strong -Wformat -Werror=format-security") (ocamlopt_cppflags "-D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2") (os_type Unix) (ranlib x86_64-linux-gnu-ranlib) (safe_string true) (standard_library /usr/lib/ocaml) (standard_library_default /usr/lib/ocaml) (supports_shared_libraries true) (system linux) (systhread_supported true) (target x86_64-pc-linux-gnu) (version 4.13.1) (windows_unicode false) (with_frame_pointers false) (word_size 64))

View File

@ -0,0 +1 @@
((6:ocamlc19:/usr/bin/ocamlc.opt)(17:ocaml_config_vars((14:afl_instrument5:false)(12:architecture5:amd64)(3:asm19:x86_64-linux-gnu-as)(17:asm_cfi_supported4:true)(21:ast_impl_magic_number12:Caml1999M030)(21:ast_intf_magic_number12:Caml1999N030)(19:bytecomp_c_compiler241:x86_64-linux-gnu-gcc -O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -g -O2 -ffile-prefix-map=/build/ocaml-SC7b9w/ocaml-4.13.1=. -fstack-protector-strong -Wformat -Werror=format-security -D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2)(20:bytecomp_c_libraries14:-lm -lpthread)(10:c_compiler20:x86_64-linux-gnu-gcc)(10:ccomp_type2:cc)(16:cma_magic_number12:Caml1999A030)(16:cmi_magic_number12:Caml1999I030)(16:cmo_magic_number12:Caml1999O030)(16:cmt_magic_number12:Caml1999T030)(16:cmx_magic_number12:Caml1999Y030)(17:cmxa_magic_number12:Caml1999Z030)(17:cmxs_magic_number12:Caml1999D030)(23:default_executable_name5:a.out)(19:default_safe_string4:true)(17:exec_magic_number12:Caml1999X030)(7:ext_asm2:.s)(7:ext_dll3:.so)(7:ext_exe0:)(7:ext_lib2:.a)(7:ext_obj2:.o)(7:flambda5:false)(16:flat_float_array4:true)(17:function_sections4:true)(4:host19:x86_64-pc-linux-gnu)(8:int_size2:63)(19:linear_magic_number12:Caml1999L030)(5:model7:default)(17:native_c_compiler241:x86_64-linux-gnu-gcc -O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -g -O2 -ffile-prefix-map=/build/ocaml-SC7b9w/ocaml-4.13.1=. -fstack-protector-strong -Wformat -Werror=format-security -D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2)(18:native_c_libraries4:-lm )(18:native_pack_linker26:x86_64-linux-gnu-ld -r -o )(13:ocamlc_cflags165:-O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -g -O2 -ffile-prefix-map=/build/ocaml-SC7b9w/ocaml-4.13.1=. -fstack-protector-strong -Wformat -Werror=format-security)(15:ocamlc_cppflags54:-D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2)(15:ocamlopt_cflags165:-O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -g -O2 -ffile-prefix-map=/build/ocaml-SC7b9w/ocaml-4.13.1=. -fstack-protector-strong -Wformat -Werror=format-security)(17:ocamlopt_cppflags54:-D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2)(7:os_type4:Unix)(6:ranlib23:x86_64-linux-gnu-ranlib)(11:safe_string4:true)(16:standard_library14:/usr/lib/ocaml)(24:standard_library_default14:/usr/lib/ocaml)(25:supports_shared_libraries4:true)(6:system5:linux)(19:systhread_supported4:true)(6:target19:x86_64-pc-linux-gnu)(7:version6:4.13.1)(15:windows_unicode5:false)(19:with_frame_pointers5:false)(9:word_size2:64))))

View File

@ -0,0 +1 @@
let () = Ppxlib.Driver.standalone ()

Binary file not shown.

View File

Binary file not shown.

View File

@ -0,0 +1,4 @@
open Metadata_store
(* Example usage *)
let () = init_db "host=localhost dbname=metastore user=youruser password=yourpassword"

View File

@ -0,0 +1 @@
(* Auto-generated by Dune *)

Binary file not shown.

View File

@ -0,0 +1 @@
lib/init.pp.ml: List PGOCaml Printf

View File

@ -0,0 +1,99 @@
let () =
let dbh = PGOCaml.connect () in
(* Define DDL statements for each table *)
let ddl_statements = [
"CREATE TABLE IF NOT EXISTS Databases (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)";
"CREATE TABLE IF NOT EXISTS Schemas (
id SERIAL PRIMARY KEY,
database_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (database_id) REFERENCES Databases (id) ON DELETE CASCADE
)";
"CREATE TABLE IF NOT EXISTS Tables (
id SERIAL PRIMARY KEY,
schema_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
is_partitioned BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (schema_id) REFERENCES Schemas (id) ON DELETE CASCADE
)";
"CREATE TABLE IF NOT EXISTS Columns (
id SERIAL PRIMARY KEY,
table_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
data_type VARCHAR(50) NOT NULL,
is_nullable BOOLEAN DEFAULT TRUE,
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (table_id) REFERENCES Tables (id) ON DELETE CASCADE
)";
"CREATE TABLE IF NOT EXISTS Partitions (
id SERIAL PRIMARY KEY,
table_id INT NOT NULL,
partition_key VARCHAR(255) NOT NULL,
partition_value VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (table_id) REFERENCES Tables (id) ON DELETE CASCADE
)";
"CREATE TABLE IF NOT EXISTS Users (
id SERIAL PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
role VARCHAR(50) DEFAULT 'user',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)";
"CREATE TABLE IF NOT EXISTS Permissions (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
resource_type VARCHAR(50) NOT NULL,
resource_id INT NOT NULL,
access_type VARCHAR(50) NOT NULL,
granted_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (user_id) REFERENCES Users (id) ON DELETE CASCADE
)";
] in
(* Execute each DDL statement *)
let execute_ddl dbh ddl =
[%pgsql dbh "execute" "CREATE TABLE IF NOT EXISTS Databases (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)"]
in
let () =
try
List.iter (execute_ddl dbh) ddl_statements;
Printf.printf "Database initialized successfully.\n"
with
| PGOCaml.Error err ->
Printf.eprintf "Error initializing database: %s\n" (PGOCaml.string_of_error err)
| exn ->
Printf.eprintf "Unexpected error: %s\n" (Printexc.to_string exn)
in
(* Close the connection *)
PGOCaml.close dbh

View File

@ -0,0 +1,4 @@
(* generated by dune *)
(** @canonical Metadata_store.Init *)
module Init = Metadata_store__Init

View File

@ -0,0 +1,4 @@
(lang dune 3.16)
(name metadata_store)
(sections (lib .) (bin ../../bin))
(files (lib (META dune-package opam)) (bin (metadata_store)))

View File

@ -0,0 +1,31 @@
# This file is generated by dune, edit dune-project instead
opam-version: "2.0"
synopsis: "A short synopsis"
description: "A longer description"
maintainer: ["Maintainer Name"]
authors: ["Author Name"]
license: "LICENSE"
tags: ["topics" "to describe" "your" "project"]
homepage: "https://github.com/username/reponame"
doc: "https://url/to/documentation"
bug-reports: "https://github.com/username/reponame/issues"
depends: [
"ocaml"
"dune" {>= "3.16"}
"odoc" {with-doc}
]
build: [
["dune" "subst"] {dev}
[
"dune"
"build"
"-p"
name
"-j"
jobs
"@install"
"@runtest" {with-test}
"@doc" {with-doc}
]
]
dev-repo: "git+https://github.com/username/reponame.git"

Binary file not shown.

View File

@ -0,0 +1 @@
(* Auto-generated by Dune *)

View File

@ -0,0 +1 @@
../../../../default/META.metadata_store

View File

@ -0,0 +1 @@
../../../../default/metadata_store.dune-package

View File

@ -0,0 +1 @@
../../../../default/metadata_store.opam

27
_build/log Normal file
View File

@ -0,0 +1,27 @@
# dune build
# OCAMLPARAM: unset
# Shared cache: disabled
# Shared cache location: /home/simon/.cache/dune/db
# Workspace root: /home/simon/Documents/metadata_store
# Auto-detected concurrency: 4
# Dune context:
# { name = "default"
# ; kind = "default"
# ; profile = Dev
# ; merlin = true
# ; fdo_target_exe = None
# ; build_dir = In_build_dir "default"
# ; instrument_with = []
# }
$ /usr/bin/ocamlc.opt -config > /tmp/dune_45b47b_output
$ (cd _build/.sandbox/0ad8d6c85f98cad7a074d690c83848a3/default && .ppx/e047dd045732eb45a5c5aa4a3855a525/ppx.exe --cookie 'library-name="metadata_store"' -o lib/init.pp.ml --impl lib/init.ml -corrected-suffix .ppx-corrected -diff-cmd - -dump-ast)
> File "lib/init.ml", lines 77-83, characters 4-7:
> 77 | ....[%pgsql dbh "execute" "CREATE TABLE IF NOT EXISTS Databases (
> 78 | id SERIAL PRIMARY KEY,
> 79 | name VARCHAR(255) NOT NULL,
> 80 | description TEXT,
> 81 | created_at TIMESTAMP DEFAULT NOW(),
> 82 | updated_at TIMESTAMP DEFAULT NOW()
> 83 | )"]
> Error: PG'OCaml PPX error: Could not make the connection host=unix, port=5432, user=simon, password=*****, database=simon, error: PGOCaml_generic.Make(Thread).Error("PGOCaml: Could not connect to database")
[1]

4
bin/dune Normal file
View File

@ -0,0 +1,4 @@
(executable
(public_name metadata_store)
(name main)
(libraries metadata_store))

4
bin/main.ml Normal file
View File

@ -0,0 +1,4 @@
open Metadata_store
(* Example usage *)
let () = init_db "host=localhost dbname=metastore user=youruser password=yourpassword"

26
dune-project Normal file
View File

@ -0,0 +1,26 @@
(lang dune 3.16)
(name metadata_store)
(generate_opam_files true)
(source
(github username/reponame))
(authors "Author Name")
(maintainers "Maintainer Name")
(license LICENSE)
(documentation https://url/to/documentation)
(package
(name metadata_store)
(synopsis "A short synopsis")
(description "A longer description")
(depends ocaml dune)
(tags
(topics "to describe" your project)))
; See the complete stanza docs at https://dune.readthedocs.io/en/stable/reference/dune-project/index.html

5
lib/dune Normal file
View File

@ -0,0 +1,5 @@
(library
(modules init)
(libraries pgocaml pgocaml_ppx)
(preprocess (pps pgocaml_ppx))
(name metadata_store))

99
lib/init.ml Normal file
View File

@ -0,0 +1,99 @@
let () =
let dbh = PGOCaml.connect () in
(* Define DDL statements for each table *)
let ddl_statements = [
"CREATE TABLE IF NOT EXISTS Databases (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)";
"CREATE TABLE IF NOT EXISTS Schemas (
id SERIAL PRIMARY KEY,
database_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (database_id) REFERENCES Databases (id) ON DELETE CASCADE
)";
"CREATE TABLE IF NOT EXISTS Tables (
id SERIAL PRIMARY KEY,
schema_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
is_partitioned BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (schema_id) REFERENCES Schemas (id) ON DELETE CASCADE
)";
"CREATE TABLE IF NOT EXISTS Columns (
id SERIAL PRIMARY KEY,
table_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
data_type VARCHAR(50) NOT NULL,
is_nullable BOOLEAN DEFAULT TRUE,
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (table_id) REFERENCES Tables (id) ON DELETE CASCADE
)";
"CREATE TABLE IF NOT EXISTS Partitions (
id SERIAL PRIMARY KEY,
table_id INT NOT NULL,
partition_key VARCHAR(255) NOT NULL,
partition_value VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (table_id) REFERENCES Tables (id) ON DELETE CASCADE
)";
"CREATE TABLE IF NOT EXISTS Users (
id SERIAL PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
role VARCHAR(50) DEFAULT 'user',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)";
"CREATE TABLE IF NOT EXISTS Permissions (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
resource_type VARCHAR(50) NOT NULL,
resource_id INT NOT NULL,
access_type VARCHAR(50) NOT NULL,
granted_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY (user_id) REFERENCES Users (id) ON DELETE CASCADE
)";
] in
(* Execute each DDL statement *)
let execute_ddl dbh ddl =
[%pgsql dbh "execute" "CREATE TABLE IF NOT EXISTS Databases (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)"]
in
let () =
try
List.iter (execute_ddl dbh) ddl_statements;
Printf.printf "Database initialized successfully.\n"
with
| PGOCaml.Error err ->
Printf.eprintf "Error initializing database: %s\n" (PGOCaml.string_of_error err)
| exn ->
Printf.eprintf "Unexpected error: %s\n" (Printexc.to_string exn)
in
(* Close the connection *)
PGOCaml.close dbh

31
metadata_store.opam Normal file
View File

@ -0,0 +1,31 @@
# This file is generated by dune, edit dune-project instead
opam-version: "2.0"
synopsis: "A short synopsis"
description: "A longer description"
maintainer: ["Maintainer Name"]
authors: ["Author Name"]
license: "LICENSE"
tags: ["topics" "to describe" "your" "project"]
homepage: "https://github.com/username/reponame"
doc: "https://url/to/documentation"
bug-reports: "https://github.com/username/reponame/issues"
depends: [
"ocaml"
"dune" {>= "3.16"}
"odoc" {with-doc}
]
build: [
["dune" "subst"] {dev}
[
"dune"
"build"
"-p"
name
"-j"
jobs
"@install"
"@runtest" {with-test}
"@doc" {with-doc}
]
]
dev-repo: "git+https://github.com/username/reponame.git"

2
test/dune Normal file
View File

@ -0,0 +1,2 @@
(test
(name test_metadata_store))

View File