diff --git a/server/migrations/20250306132638_create_table_scripts.sql b/server/migrations/20250306132638_create_table_scripts.sql index 8b76969..fca6ac6 100644 --- a/server/migrations/20250306132638_create_table_scripts.sql +++ b/server/migrations/20250306132638_create_table_scripts.sql @@ -2,11 +2,10 @@ CREATE TABLE table_scripts ( id BIGSERIAL PRIMARY KEY, table_definitions_id BIGINT NOT NULL REFERENCES table_definitions(id), + target_table TEXT NOT NULL, target_column TEXT NOT NULL, target_column_type TEXT NOT NULL, script TEXT NOT NULL, - source_tables TEXT[], - source_columns TEXT[], description TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, profile_id BIGINT NOT NULL REFERENCES profiles(id) DEFAULT 1, diff --git a/server/src/steel/server/execution.rs b/server/src/steel/server/execution.rs index b8308a8..8b33bc0 100644 --- a/server/src/steel/server/execution.rs +++ b/server/src/steel/server/execution.rs @@ -31,7 +31,7 @@ pub fn execute_script( let mut vm = Engine::new(); let data = current_data.clone(); - vm.register_fn("get_current_column", move |column: String| { + vm.register_fn("steel_get_column", move |column: String| { data.get(&column) .map(|s| SteelVal::StringV(s.clone().into())) .ok_or_else(|| SteelVal::StringV(format!("Column {} not found", column).into())) @@ -67,14 +67,14 @@ pub fn execute_script_with_sql( let handle = Handle::current(); let data = current_data.clone(); - vm.register_fn("get_current_column", move |column: String| { + vm.register_fn("steel_get_column", move |column: String| { data.get(&column) .map(|s| SteelVal::StringV(s.clone().into())) .ok_or_else(|| SteelVal::StringV(format!("Column {} not found", column).into())) }); let pool = db_pool.clone(); - vm.register_fn("query_sql_from_steel", move |query: String| { + vm.register_fn("steel_query_sql", move |query: String| { let pool = pool.clone(); let query = query.clone(); let handle = handle.clone(); diff --git a/server/src/steel/server/syntax_parser.rs b/server/src/steel/server/syntax_parser.rs index f40938c..a0444fa 100644 --- a/server/src/steel/server/syntax_parser.rs +++ b/server/src/steel/server/syntax_parser.rs @@ -35,12 +35,12 @@ impl SyntaxParser { // Process basic column access transformed = self.column_access_re.replace_all(&transformed, |caps: ®ex::Captures| { - format!("(get_current_column \"{}\")", &caps[1]) + format!("(steel_get_column \"{}\")", &caps[1]) }).to_string(); // Process SQL integration transformed = self.sql_integration_re.replace_all(&transformed, |caps: ®ex::Captures| { - format!("(query_sql_from_steel \"{}\")", &caps[2]) + format!("(steel_query_sql \"{}\")", &caps[2]) }).to_string(); transformed diff --git a/server/src/table_script/handlers/post_table_script.rs b/server/src/table_script/handlers/post_table_script.rs index b406849..76b9443 100644 --- a/server/src/table_script/handlers/post_table_script.rs +++ b/server/src/table_script/handlers/post_table_script.rs @@ -19,7 +19,6 @@ fn validate_target_column( let columns: Vec = serde_json::from_value(table_columns.clone()) .map_err(|e| format!("Invalid column data: {}", e))?; - // Extract column name and type let column_info: Vec<(&str, &str)> = columns .iter() .filter_map(|c| { @@ -30,7 +29,6 @@ fn validate_target_column( }) .collect(); - // Find the target column let column_type = column_info .iter() .find(|(name, _)| *name == target) @@ -65,26 +63,22 @@ pub async fn post_table_script( // Parse and transform the script let parser = SyntaxParser::new(); let parsed_script = parser.parse(&request.script); - - // Extract dependencies - let (source_tables, source_columns) = parser.extract_dependencies(&request.script); - // Store script in database with column type and profile_id + // Store script in database with automatic target_table let script_record = sqlx::query!( r#"INSERT INTO table_scripts - (table_definitions_id, target_column, target_column_type, - script, source_tables, source_columns, description, profile_id) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8) + (table_definitions_id, target_table, target_column, + target_column_type, script, description, profile_id) + VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id"#, request.table_definition_id, + table_def.table_name, // Auto-populate target_table from table_def request.target_column, column_type, - parsed_script, // Store transformed script - &Vec::from_iter(source_tables), - &Vec::from_iter(source_columns), + parsed_script, request.description, table_def.profile_id - ) + ) .fetch_one(db_pool) .await .map_err(|e| match e {