diff --git a/Cargo.lock b/Cargo.lock index 210d9c8..737a314 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2487,6 +2487,7 @@ version = "0.1.0" dependencies = [ "chrono", "common", + "dashmap", "dotenvy", "lazy_static", "prost", @@ -2496,6 +2497,7 @@ dependencies = [ "sqlx", "steel-core", "steel-derive 0.5.0 (git+https://github.com/mattwparas/steel.git?branch=master)", + "thiserror 2.0.12", "time", "tokio", "tonic", diff --git a/server/.sqlx/query-3adac56bb53ad25d03352a6e75cab29f8a1b4620e528a16831b7a61135ccb746.json b/server/.sqlx/query-3adac56bb53ad25d03352a6e75cab29f8a1b4620e528a16831b7a61135ccb746.json deleted file mode 100644 index 43474c0..0000000 --- a/server/.sqlx/query-3adac56bb53ad25d03352a6e75cab29f8a1b4620e528a16831b7a61135ccb746.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "INSERT INTO table_definitions\n (profile_id, table_name, columns, indexes, linked_table_id)\n VALUES ($1, $2, $3, $4, $5)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Text", - "Jsonb", - "Jsonb", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "3adac56bb53ad25d03352a6e75cab29f8a1b4620e528a16831b7a61135ccb746" -} diff --git a/server/.sqlx/query-41621bc47426b92c64e6dfc56f001ad47263b6eed93f5f68601746c4059db3f8.json b/server/.sqlx/query-41621bc47426b92c64e6dfc56f001ad47263b6eed93f5f68601746c4059db3f8.json new file mode 100644 index 0000000..e878c14 --- /dev/null +++ b/server/.sqlx/query-41621bc47426b92c64e6dfc56f001ad47263b6eed93f5f68601746c4059db3f8.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO table_definition_links\n (source_table_id, linked_table_id, is_required)\n VALUES ($1, $2, $3)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "41621bc47426b92c64e6dfc56f001ad47263b6eed93f5f68601746c4059db3f8" +} diff --git a/server/.sqlx/query-4cd5de4d3332ca35a9975ffb32728041978435e14f97c559e2ffec4a82d567ae.json b/server/.sqlx/query-4cd5de4d3332ca35a9975ffb32728041978435e14f97c559e2ffec4a82d567ae.json new file mode 100644 index 0000000..c8138db --- /dev/null +++ b/server/.sqlx/query-4cd5de4d3332ca35a9975ffb32728041978435e14f97c559e2ffec4a82d567ae.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO table_scripts\n (table_definitions_id, target_column, target_column_type, script, description)\n VALUES ($1, $2, $3, $4, $5)\n RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text", + "Text", + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "4cd5de4d3332ca35a9975ffb32728041978435e14f97c559e2ffec4a82d567ae" +} diff --git a/server/.sqlx/query-5d8e169a5173fd45cf42f56c5dcc85cf5ac7af1950b269d8a57b080fc2684d60.json b/server/.sqlx/query-5d8e169a5173fd45cf42f56c5dcc85cf5ac7af1950b269d8a57b080fc2684d60.json deleted file mode 100644 index 05d1bdd..0000000 --- a/server/.sqlx/query-5d8e169a5173fd45cf42f56c5dcc85cf5ac7af1950b269d8a57b080fc2684d60.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n td.table_name,\n ltd.table_name as \"linked_table_name?\"\n FROM table_definitions td\n LEFT JOIN table_definitions ltd ON td.linked_table_id = ltd.id\n WHERE td.profile_id = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "table_name", - "type_info": "Text" - }, - { - "ordinal": 1, - "name": "linked_table_name?", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false, - false - ] - }, - "hash": "5d8e169a5173fd45cf42f56c5dcc85cf5ac7af1950b269d8a57b080fc2684d60" -} diff --git a/server/.sqlx/query-9156cb59f4b13da4efa71051444e401f8e88524733d8ec46e4ef13f87ad8214d.json b/server/.sqlx/query-792d886a32bc6b6b7ca27ad347e96ff4ae66a4b8da8185dfb27b9d883e068c43.json similarity index 61% rename from server/.sqlx/query-9156cb59f4b13da4efa71051444e401f8e88524733d8ec46e4ef13f87ad8214d.json rename to server/.sqlx/query-792d886a32bc6b6b7ca27ad347e96ff4ae66a4b8da8185dfb27b9d883e068c43.json index d7c3f18..4ac3975 100644 --- a/server/.sqlx/query-9156cb59f4b13da4efa71051444e401f8e88524733d8ec46e4ef13f87ad8214d.json +++ b/server/.sqlx/query-792d886a32bc6b6b7ca27ad347e96ff4ae66a4b8da8185dfb27b9d883e068c43.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT id FROM table_definitions\n WHERE profile_id = $1 AND table_name = $2", + "query": "SELECT id FROM table_definitions\n WHERE profile_id = $1 AND table_name = $2", "describe": { "columns": [ { @@ -19,5 +19,5 @@ false ] }, - "hash": "9156cb59f4b13da4efa71051444e401f8e88524733d8ec46e4ef13f87ad8214d" + "hash": "792d886a32bc6b6b7ca27ad347e96ff4ae66a4b8da8185dfb27b9d883e068c43" } diff --git a/server/.sqlx/query-bda5d4507e4f190b8b9df224688095bb0c77017709415e91e8164a5f029f46af.json b/server/.sqlx/query-a466364aa022c2bae1a58f683ecdf390205e43da6b04f46a42820b2fff9e6a79.json similarity index 55% rename from server/.sqlx/query-bda5d4507e4f190b8b9df224688095bb0c77017709415e91e8164a5f029f46af.json rename to server/.sqlx/query-a466364aa022c2bae1a58f683ecdf390205e43da6b04f46a42820b2fff9e6a79.json index 0187a2e..d95e9ef 100644 --- a/server/.sqlx/query-bda5d4507e4f190b8b9df224688095bb0c77017709415e91e8164a5f029f46af.json +++ b/server/.sqlx/query-a466364aa022c2bae1a58f683ecdf390205e43da6b04f46a42820b2fff9e6a79.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT id, columns, linked_table_id FROM table_definitions\n WHERE profile_id = $1 AND table_name = $2", + "query": "SELECT id, table_name, columns, profile_id\n FROM table_definitions WHERE id = $1", "describe": { "columns": [ { @@ -10,26 +10,31 @@ }, { "ordinal": 1, + "name": "table_name", + "type_info": "Text" + }, + { + "ordinal": 2, "name": "columns", "type_info": "Jsonb" }, { - "ordinal": 2, - "name": "linked_table_id", + "ordinal": 3, + "name": "profile_id", "type_info": "Int8" } ], "parameters": { "Left": [ - "Int8", - "Text" + "Int8" ] }, "nullable": [ false, false, - true + false, + false ] }, - "hash": "bda5d4507e4f190b8b9df224688095bb0c77017709415e91e8164a5f029f46af" + "hash": "a466364aa022c2bae1a58f683ecdf390205e43da6b04f46a42820b2fff9e6a79" } diff --git a/server/.sqlx/query-b097f30f98490b979939759d85327a20ca7ade4866052a5cfdb0451fb76fbf15.json b/server/.sqlx/query-b097f30f98490b979939759d85327a20ca7ade4866052a5cfdb0451fb76fbf15.json new file mode 100644 index 0000000..71f34c7 --- /dev/null +++ b/server/.sqlx/query-b097f30f98490b979939759d85327a20ca7ade4866052a5cfdb0451fb76fbf15.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT ltd.table_name \n FROM table_definition_links tdl\n JOIN table_definitions ltd ON tdl.linked_table_id = ltd.id\n WHERE tdl.source_table_id = $1 AND tdl.is_required = true", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "table_name", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "b097f30f98490b979939759d85327a20ca7ade4866052a5cfdb0451fb76fbf15" +} diff --git a/server/.sqlx/query-b519307ed5b2dba41c37845f23f9abff35312b62cf05ef2e8c5faa4ab0b0c194.json b/server/.sqlx/query-b519307ed5b2dba41c37845f23f9abff35312b62cf05ef2e8c5faa4ab0b0c194.json new file mode 100644 index 0000000..cd3a641 --- /dev/null +++ b/server/.sqlx/query-b519307ed5b2dba41c37845f23f9abff35312b62cf05ef2e8c5faa4ab0b0c194.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT target_column, script FROM table_scripts WHERE table_definitions_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "target_column", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "script", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "b519307ed5b2dba41c37845f23f9abff35312b62cf05ef2e8c5faa4ab0b0c194" +} diff --git a/server/.sqlx/query-d1579b19c2b04abd5b58c5ea39f740e403917db736c94e4054d04f8c9509f57a.json b/server/.sqlx/query-d1579b19c2b04abd5b58c5ea39f740e403917db736c94e4054d04f8c9509f57a.json new file mode 100644 index 0000000..0dc98a3 --- /dev/null +++ b/server/.sqlx/query-d1579b19c2b04abd5b58c5ea39f740e403917db736c94e4054d04f8c9509f57a.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO table_definitions\n (profile_id, table_name, columns, indexes)\n VALUES ($1, $2, $3, $4)\n RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text", + "Jsonb", + "Jsonb" + ] + }, + "nullable": [ + false + ] + }, + "hash": "d1579b19c2b04abd5b58c5ea39f740e403917db736c94e4054d04f8c9509f57a" +} diff --git a/server/.sqlx/query-e23802d20f7f929810f5d294a36d23eca89d4abf6aa7d7d4b4fee9147e153b57.json b/server/.sqlx/query-e23802d20f7f929810f5d294a36d23eca89d4abf6aa7d7d4b4fee9147e153b57.json new file mode 100644 index 0000000..942e498 --- /dev/null +++ b/server/.sqlx/query-e23802d20f7f929810f5d294a36d23eca89d4abf6aa7d7d4b4fee9147e153b57.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n td.table_name,\n COALESCE(\n json_agg(\n json_build_object(\n 'linked_name', ltd.table_name,\n 'required', tdl.is_required\n )\n ) FILTER (WHERE ltd.id IS NOT NULL),\n '[]'\n ) as dependencies\n FROM table_definitions td\n LEFT JOIN table_definition_links tdl ON td.id = tdl.source_table_id\n LEFT JOIN table_definitions ltd ON tdl.linked_table_id = ltd.id\n WHERE td.profile_id = $1\n GROUP BY td.table_name\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "table_name", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "dependencies", + "type_info": "Json" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false, + null + ] + }, + "hash": "e23802d20f7f929810f5d294a36d23eca89d4abf6aa7d7d4b4fee9147e153b57" +} diff --git a/server/Cargo.toml b/server/Cargo.toml index 73cce9b..390fd28 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -21,6 +21,8 @@ time = { version = "0.3.39", features = ["local-offset"] } steel-derive = { git = "https://github.com/mattwparas/steel.git", branch = "master", package = "steel-derive" } steel-core = { git = "https://github.com/mattwparas/steel.git", version = "0.6.0", features = ["anyhow", "dylibs", "sync"] } thiserror = "2.0.12" +dashmap = "6.1.0" +lazy_static = "1.5.0" [lib] name = "server" diff --git a/server/src/steel/server/execution.rs b/server/src/steel/server/execution.rs index 3852581..e38540e 100644 --- a/server/src/steel/server/execution.rs +++ b/server/src/steel/server/execution.rs @@ -25,6 +25,7 @@ pub fn execute_script( ) -> Result { let mut vm = Engine::new(); + // SAFETY: THIS IS NEEDS TO BE REDONE // Convert to Box then leak to get 'static lifetime let static_script: &'static str = Box::leak(script.to_string().into_boxed_str());