Skip to content

Commit 6da153e

Browse files
authored
Fix Postgres array syntax for UPDATE (#644)
1 parent 43b5f8e commit 6da153e

File tree

5 files changed

+16
-5
lines changed

5 files changed

+16
-5
lines changed

pypika/queries.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,9 @@ def minus(self, other: "QueryBuilder") -> _SetOperation:
11101110
@builder
11111111
def set(self, field: Union[Field, str], value: Any) -> None:
11121112
field = Field(field) if not isinstance(field, Field) else field
1113-
self._updates.append((field, self._wrapper_cls(value)))
1113+
if not isinstance(value, Term):
1114+
value = self.wrap_constant(value, wrapper_cls=self._wrapper_cls)
1115+
self._updates.append((field, value))
11141116

11151117
def __add__(self, other: "QueryBuilder") -> _SetOperation:
11161118
return self.union(other)

pypika/terms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ def get_sql(self, **kwargs: Any) -> str:
586586

587587
class NullValue(LiteralValue):
588588
def __init__(self, alias: Optional[str] = None) -> None:
589-
super().__init__("NULL", alias)
589+
super().__init__("null", alias)
590590

591591

592592
class SystemTimeValue(LiteralValue):

pypika/tests/dialects/test_postgresql.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ def test_array_keyword(self):
2020
self.assertEqual("INSERT INTO \"abc\" VALUES (1,ARRAY[1,'a',true])", str(q))
2121

2222

23+
class UpdateTests(unittest.TestCase):
24+
table_abc = Table("abc")
25+
26+
def test_postgresquery(self):
27+
q = PostgreSQLQuery.update(self.table_abc).set(1, [1, "a", True])
28+
29+
self.assertEqual("UPDATE \"abc\" SET \"1\"=ARRAY[1,'a',true]", str(q))
30+
31+
2332
class JSONObjectTests(unittest.TestCase):
2433
def test_alias_set_correctly(self):
2534
table = Table('jsonb_table')

pypika/tests/test_inserts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def test_insert_ignore(self):
149149
def test_insert_null(self):
150150
query = Query.into(self.table_abc).insert(None)
151151

152-
self.assertEqual('INSERT INTO "abc" VALUES (NULL)', str(query))
152+
self.assertEqual('INSERT INTO "abc" VALUES (null)', str(query))
153153

154154
def test_insert_column_using_table_alias(self):
155155
q = self.table_abc.insert(1)
@@ -541,7 +541,7 @@ def test_insert_all_columns_single_element_arrays(self):
541541
def test_insert_returning_null(self):
542542
query = PostgreSQLQuery.into(self.table_abc).insert(1).returning(None)
543543

544-
self.assertEqual('INSERT INTO "abc" VALUES (1) RETURNING NULL', str(query))
544+
self.assertEqual('INSERT INTO "abc" VALUES (1) RETURNING null', str(query))
545545

546546
def test_insert_returning_tuple(self):
547547
query = PostgreSQLQuery.into(self.table_abc).insert(1).returning((1, 2, 3))

pypika/tests/test_selects.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@ def test_table_with_schema_and_alias(self):
11671167
def test_null_value_with_alias(self):
11681168
q = Query.select(NullValue().as_("abcdef"))
11691169

1170-
self.assertEqual('SELECT NULL "abcdef"', str(q))
1170+
self.assertEqual('SELECT null "abcdef"', str(q))
11711171

11721172

11731173
class SubqueryTests(unittest.TestCase):

0 commit comments

Comments
 (0)