diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py index b4416353..3281b829 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py @@ -50,6 +50,12 @@ def update_format(self): def delete_format(self): return "DELETE FROM {table} {wheres}" + def insert_format(self): + return "INSERT INTO {table} ({columns}) VALUES ({values})" + + def bulk_insert_format(self): + return "INSERT INTO {table} ({columns}) VALUES {values}" + def aggregate_string_with_alias(self): return "{aggregate_function}({column}) AS {alias}" diff --git a/fastapi_startkit/tests/masoniteorm/postgres/grammar/__init__.py b/fastapi_startkit/tests/masoniteorm/postgres/grammar/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/fastapi_startkit/tests/masoniteorm/postgres/grammar/test_postgres_insert_grammar.py b/fastapi_startkit/tests/masoniteorm/postgres/grammar/test_postgres_insert_grammar.py new file mode 100644 index 00000000..382daf0d --- /dev/null +++ b/fastapi_startkit/tests/masoniteorm/postgres/grammar/test_postgres_insert_grammar.py @@ -0,0 +1,36 @@ +import unittest + +from fastapi_startkit.masoniteorm.query.grammars.PostgresGrammar import PostgresGrammar + + +class TestPostgresInsertGrammar(unittest.TestCase): + """Grammar-level unit tests — no live Postgres connection required.""" + + def test_insert_format_is_defined(self): + result = PostgresGrammar().insert_format() + self.assertEqual(result, "INSERT INTO {table} ({columns}) VALUES ({values})") + + def test_bulk_insert_format_is_defined(self): + result = PostgresGrammar().bulk_insert_format() + self.assertEqual(result, "INSERT INTO {table} ({columns}) VALUES {values}") + + def test_compile_bulk_create_builds_multi_row_insert(self): + # Regression: PostgresGrammar previously lacked bulk_insert_format(), + # so compiling a bulk create raised AttributeError. + rows = [ + {"name": "Joe", "email": "joe@example.com"}, + {"name": "Bob", "email": "bob@example.com"}, + ] + grammar = PostgresGrammar(columns=rows, table="users") + + sql = grammar.compile("bulk_create")._sql + + self.assertEqual( + sql, + 'INSERT INTO "users" ("name", "email") VALUES ' + "('Joe', 'joe@example.com'), ('Bob', 'bob@example.com')", + ) + + +if __name__ == "__main__": + unittest.main()