]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Added sql adaptation from None to NULL
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 28 Oct 2020 03:14:42 +0000 (04:14 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 28 Oct 2020 03:20:58 +0000 (04:20 +0100)
This is a special case now, because None is no more a value to adapt, as
it's not passed to PQexecParams like other values are.

psycopg3/psycopg3/sql.py
tests/test_sql.py

index 434f2ed2ebee777b5258dff8a54944acf3585308..2dc0cb737df6ced39cfdbbb72485976d034727c0 100644 (file)
@@ -368,6 +368,9 @@ class Literal(Composable):
     """
 
     def as_string(self, context: AdaptContext) -> str:
+        if self._obj is None:
+            return "NULL"
+
         from .adapt import _connection_from_context, Transformer
 
         conn = _connection_from_context(context)
index 6c95516b39ec69f192bbccfc6404d342028267c6..267bd4fd5d0d34f6eb5f94fe80a766c409083322 100755 (executable)
@@ -10,6 +10,14 @@ import pytest
 from psycopg3 import sql, ProgrammingError
 
 
+@pytest.mark.parametrize(
+    "obj, quoted",
+    [("hello", "'hello'"), (42, "'42'"), (True, "'t'"), (None, "NULL")],
+)
+def test_quote(obj, quoted):
+    assert sql.quote(obj) == quoted
+
+
 class TestSqlFormat:
     def test_pos(self, conn):
         s = sql.SQL("select {} from {}").format(
@@ -234,9 +242,12 @@ class TestLiteral:
         assert isinstance(sql.Literal(42), sql.Literal)
         assert isinstance(sql.Literal(dt.date(2016, 12, 31)), sql.Literal)
 
-    def test_repr(self, conn):
+    def test_repr(self):
         assert repr(sql.Literal("foo")) == "Literal('foo')"
         assert str(sql.Literal("foo")) == "Literal('foo')"
+
+    def test_as_str(self, conn):
+        assert sql.Literal(None).as_string(conn) == "NULL"
         assert noe(sql.Literal("foo").as_string(conn)) == "'foo'"
         assert sql.Literal(42).as_string(conn) == "'42'"
         assert (