diff --git a/edgedb/codegen/generator.py b/edgedb/codegen/generator.py index 9b657d3a..a83f6c38 100644 --- a/edgedb/codegen/generator.py +++ b/edgedb/codegen/generator.py @@ -68,6 +68,7 @@ "cal::date_duration": "edgedb.DateDuration", "cfg::memory": "edgedb.ConfigMemory", "ext::pgvector::vector": "array.array", + "ext::pgsparse::vector": "array.array", } TYPE_IMPORTS = { @@ -79,12 +80,14 @@ "cal::local_time": "datetime", "cal::local_datetime": "datetime", "ext::pgvector::vector": "array", + "ext::pgsparse::vector": "array", } INPUT_TYPE_MAPPING = TYPE_MAPPING.copy() INPUT_TYPE_MAPPING.update( { "ext::pgvector::vector": "typing.Sequence[float]", + "ext::pgsparse::vector": "typing.Sequence[float]", } ) @@ -92,6 +95,7 @@ INPUT_TYPE_IMPORTS.update( { "ext::pgvector::vector": "typing", + "ext::pgsparse::vector": "typing", } ) diff --git a/tests/codegen/test-project2/generated_async_edgeql.py.assert b/tests/codegen/test-project2/generated_async_edgeql.py.assert index 2095cc9a..798f99e7 100644 --- a/tests/codegen/test-project2/generated_async_edgeql.py.assert +++ b/tests/codegen/test-project2/generated_async_edgeql.py.assert @@ -22,7 +22,8 @@ import typing import uuid -Input = typing.Sequence[float] +Input0 = typing.Sequence[float] +Input1 = typing.Sequence[float] MyScalar = int @@ -118,6 +119,8 @@ class MyQueryResult: bb: MyEnum | None bc: array.array bd: array.array | None + be: array.array + bf: array.array | None @dataclasses.dataclass @@ -145,13 +148,17 @@ class SelectObjectResultParamsItem: async def custom_vector_input( executor: edgedb.AsyncIOExecutor, *, - input: Input | None = None, + input0: Input | None = None, + input1: Input | None = None, ) -> int | None: return await executor.query_single( """\ - select 42 filter exists $input;\ + select 42 filter + exists $input0 + or exists $input1;\ """, - input=input, + input0=input0, + input1=input1, ) @@ -237,6 +244,8 @@ async def my_query( ax: edgedb.Range[datetime.date] | None = None, bc: typing.Sequence[float], bd: typing.Sequence[float] | None = None, + be: typing.Sequence[float], + bf: typing.Sequence[float] | None = None, ) -> MyQueryResult: return await executor.query_single( """\ @@ -244,62 +253,64 @@ async def my_query( create scalar type MyEnum extending enum<'This', 'That', '1', 'f. b', 'f-b'>; select { - a := $a, - b := $b, - c := $c, - d := $d, - e := $e, - f := $f, - g := $g, - h := $h, - i := $i, - j := $j, - k := $k, - l := $l, - m := $m, - n := $n, - o := $o, - p := $p, - q := $q, - r := $r, - s := $s, - t := $t, - u := $u, - v := $v, - w := $w, - x := $x, - y := $y, - z := $z, - aa := $aa, - ab := $ab, - ac := $ac, - ad := $ad, - ae := $ae, - af := $af, - ag := $ag, - ah := $ah, - ai := $ai, - aj := $aj, - ak := >$ak, - al := >$al, - am := >$am, - an := >$an, - ao := >$ao, - ap := >$ap, - aq := >$aq, - ar := >$ar, - as_ := >$as_, - at := >$at, - au := >$au, - av := >$av, - aw := >$aw, - ax := >$ax, - ay := 1, - az := {}, - ba := MyEnum.This, - bb := {}, - bc := $bc, - bd := $bd, + a := $a, + b := $b, + c := $c, + d := $d, + e := $e, + f := $f, + g := $g, + h := $h, + i := $i, + j := $j, + k := $k, + l := $l, + m := $m, + n := $n, + o := $o, + p := $p, + q := $q, + r := $r, + s := $s, + t := $t, + u := $u, + v := $v, + w := $w, + x := $x, + y := $y, + z := $z, + aa := $aa, + ab := $ab, + ac := $ac, + ad := $ad, + ae := $ae, + af := $af, + ag := $ag, + ah := $ah, + ai := $ai, + aj := $aj, + ak := >$ak, + al := >$al, + am := >$am, + an := >$an, + ao := >$ao, + ap := >$ap, + aq := >$aq, + ar := >$ar, + as_ := >$as_, + at := >$at, + au := >$au, + av := >$av, + aw := >$aw, + ax := >$ax, + ay := 1, + az := {}, + ba := MyEnum.This, + bb := {}, + bc := $bc, + bd := $bd, + be := $be, + bf := $bf, }\ """, a=a, @@ -354,6 +365,8 @@ async def my_query( ax=ax, bc=bc, bd=bd, + be=be, + bf=bf, ) @@ -379,8 +392,8 @@ async def select_args( return await executor.query_single( """\ select { - Str := $arg_str, - DateTime := $arg_datetime, + Str := $arg_str, + DateTime := $arg_datetime, }\ """, arg_str=arg_str, diff --git a/tests/codegen/test-project2/generated_async_edgeql.py.assert4 b/tests/codegen/test-project2/generated_async_edgeql.py.assert4 index 75d52ea7..263f4fb4 100644 --- a/tests/codegen/test-project2/generated_async_edgeql.py.assert4 +++ b/tests/codegen/test-project2/generated_async_edgeql.py.assert4 @@ -23,6 +23,7 @@ import uuid MyScalar = int +Sv3 = typing.Sequence[float] V3 = typing.Sequence[float] @@ -118,6 +119,8 @@ class MyQueryResult: bb: MyEnum | None bc: array.array bd: array.array | None + be: array.array + bf: array.array | None @dataclasses.dataclass @@ -145,13 +148,17 @@ class SelectObjectResultParamsItem: async def custom_vector_input( executor: edgedb.AsyncIOExecutor, *, - input: V3 | None = None, + input0: V3 | None = None, + input1: Sv3 | None = None, ) -> int | None: return await executor.query_single( """\ - select 42 filter exists $input;\ + select 42 filter + exists $input0 + or exists $input1;\ """, - input=input, + input0=input0, + input1=input1, ) @@ -237,6 +244,8 @@ async def my_query( ax: edgedb.Range[datetime.date] | None = None, bc: typing.Sequence[float], bd: typing.Sequence[float] | None = None, + be: typing.Sequence[float], + bf: typing.Sequence[float] | None = None, ) -> MyQueryResult: return await executor.query_single( """\ @@ -244,62 +253,64 @@ async def my_query( create scalar type MyEnum extending enum<'This', 'That', '1', 'f. b', 'f-b'>; select { - a := $a, - b := $b, - c := $c, - d := $d, - e := $e, - f := $f, - g := $g, - h := $h, - i := $i, - j := $j, - k := $k, - l := $l, - m := $m, - n := $n, - o := $o, - p := $p, - q := $q, - r := $r, - s := $s, - t := $t, - u := $u, - v := $v, - w := $w, - x := $x, - y := $y, - z := $z, - aa := $aa, - ab := $ab, - ac := $ac, - ad := $ad, - ae := $ae, - af := $af, - ag := $ag, - ah := $ah, - ai := $ai, - aj := $aj, - ak := >$ak, - al := >$al, - am := >$am, - an := >$an, - ao := >$ao, - ap := >$ap, - aq := >$aq, - ar := >$ar, - as_ := >$as_, - at := >$at, - au := >$au, - av := >$av, - aw := >$aw, - ax := >$ax, - ay := 1, - az := {}, - ba := MyEnum.This, - bb := {}, - bc := $bc, - bd := $bd, + a := $a, + b := $b, + c := $c, + d := $d, + e := $e, + f := $f, + g := $g, + h := $h, + i := $i, + j := $j, + k := $k, + l := $l, + m := $m, + n := $n, + o := $o, + p := $p, + q := $q, + r := $r, + s := $s, + t := $t, + u := $u, + v := $v, + w := $w, + x := $x, + y := $y, + z := $z, + aa := $aa, + ab := $ab, + ac := $ac, + ad := $ad, + ae := $ae, + af := $af, + ag := $ag, + ah := $ah, + ai := $ai, + aj := $aj, + ak := >$ak, + al := >$al, + am := >$am, + an := >$an, + ao := >$ao, + ap := >$ap, + aq := >$aq, + ar := >$ar, + as_ := >$as_, + at := >$at, + au := >$au, + av := >$av, + aw := >$aw, + ax := >$ax, + ay := 1, + az := {}, + ba := MyEnum.This, + bb := {}, + bc := $bc, + bd := $bd, + be := $be, + bf := $bf, }\ """, a=a, @@ -354,6 +365,8 @@ async def my_query( ax=ax, bc=bc, bd=bd, + be=be, + bf=bf, ) @@ -379,8 +392,8 @@ async def select_args( return await executor.query_single( """\ select { - Str := $arg_str, - DateTime := $arg_datetime, + Str := $arg_str, + DateTime := $arg_datetime, }\ """, arg_str=arg_str, diff --git a/tests/codegen/test-project2/parpkg/select_args.edgeql b/tests/codegen/test-project2/parpkg/select_args.edgeql index 2654276e..5951b574 100644 --- a/tests/codegen/test-project2/parpkg/select_args.edgeql +++ b/tests/codegen/test-project2/parpkg/select_args.edgeql @@ -1,4 +1,4 @@ select { - Str := $arg_str, - DateTime := $arg_datetime, + Str := $arg_str, + DateTime := $arg_datetime, } diff --git a/tests/codegen/test-project2/parpkg/select_args_async_edgeql.py.assert b/tests/codegen/test-project2/parpkg/select_args_async_edgeql.py.assert index 10327852..29e20bc8 100644 --- a/tests/codegen/test-project2/parpkg/select_args_async_edgeql.py.assert +++ b/tests/codegen/test-project2/parpkg/select_args_async_edgeql.py.assert @@ -41,8 +41,8 @@ async def select_args( return await executor.query_single( """\ select { - Str := $arg_str, - DateTime := $arg_datetime, + Str := $arg_str, + DateTime := $arg_datetime, }\ """, arg_str=arg_str, diff --git a/tests/codegen/test-project2/parpkg/select_args_edgeql.py.assert b/tests/codegen/test-project2/parpkg/select_args_edgeql.py.assert index cc0d8cfc..81572efe 100644 --- a/tests/codegen/test-project2/parpkg/select_args_edgeql.py.assert +++ b/tests/codegen/test-project2/parpkg/select_args_edgeql.py.assert @@ -25,8 +25,8 @@ def select_args( return executor.query_single( """\ select { - Str := $arg_str, - DateTime := $arg_datetime, + Str := $arg_str, + DateTime := $arg_datetime, }\ """, arg_str=arg_str, diff --git a/tests/codegen/test-project2/parpkg/subpkg/my_query.edgeql b/tests/codegen/test-project2/parpkg/subpkg/my_query.edgeql index 8e5bd35d..a78572e9 100644 --- a/tests/codegen/test-project2/parpkg/subpkg/my_query.edgeql +++ b/tests/codegen/test-project2/parpkg/subpkg/my_query.edgeql @@ -2,60 +2,62 @@ create scalar type MyScalar extending int64; create scalar type MyEnum extending enum<'This', 'That', '1', 'f. b', 'f-b'>; select { - a := $a, - b := $b, - c := $c, - d := $d, - e := $e, - f := $f, - g := $g, - h := $h, - i := $i, - j := $j, - k := $k, - l := $l, - m := $m, - n := $n, - o := $o, - p := $p, - q := $q, - r := $r, - s := $s, - t := $t, - u := $u, - v := $v, - w := $w, - x := $x, - y := $y, - z := $z, - aa := $aa, - ab := $ab, - ac := $ac, - ad := $ad, - ae := $ae, - af := $af, - ag := $ag, - ah := $ah, - ai := $ai, - aj := $aj, - ak := >$ak, - al := >$al, - am := >$am, - an := >$an, - ao := >$ao, - ap := >$ap, - aq := >$aq, - ar := >$ar, - as_ := >$as_, - at := >$at, - au := >$au, - av := >$av, - aw := >$aw, - ax := >$ax, - ay := 1, - az := {}, - ba := MyEnum.This, - bb := {}, - bc := $bc, - bd := $bd, + a := $a, + b := $b, + c := $c, + d := $d, + e := $e, + f := $f, + g := $g, + h := $h, + i := $i, + j := $j, + k := $k, + l := $l, + m := $m, + n := $n, + o := $o, + p := $p, + q := $q, + r := $r, + s := $s, + t := $t, + u := $u, + v := $v, + w := $w, + x := $x, + y := $y, + z := $z, + aa := $aa, + ab := $ab, + ac := $ac, + ad := $ad, + ae := $ae, + af := $af, + ag := $ag, + ah := $ah, + ai := $ai, + aj := $aj, + ak := >$ak, + al := >$al, + am := >$am, + an := >$an, + ao := >$ao, + ap := >$ap, + aq := >$aq, + ar := >$ar, + as_ := >$as_, + at := >$at, + au := >$au, + av := >$av, + aw := >$aw, + ax := >$ax, + ay := 1, + az := {}, + ba := MyEnum.This, + bb := {}, + bc := $bc, + bd := $bd, + be := $be, + bf := $bf, } diff --git a/tests/codegen/test-project2/parpkg/subpkg/my_query_async_edgeql.py.assert b/tests/codegen/test-project2/parpkg/subpkg/my_query_async_edgeql.py.assert index d9aa5a01..195b55fc 100644 --- a/tests/codegen/test-project2/parpkg/subpkg/my_query_async_edgeql.py.assert +++ b/tests/codegen/test-project2/parpkg/subpkg/my_query_async_edgeql.py.assert @@ -98,6 +98,8 @@ class MyQueryResult(NoPydanticValidation): bb: typing.Optional[MyEnum] bc: array.array bd: typing.Optional[array.array] + be: array.array + bf: typing.Optional[array.array] async def my_query( @@ -155,6 +157,8 @@ async def my_query( ax: typing.Optional[edgedb.Range[datetime.date]] = None, bc: typing.Sequence[float], bd: typing.Optional[typing.Sequence[float]] = None, + be: typing.Sequence[float], + bf: typing.Optional[typing.Sequence[float]] = None, ) -> MyQueryResult: return await executor.query_single( """\ @@ -162,62 +166,64 @@ async def my_query( create scalar type MyEnum extending enum<'This', 'That', '1', 'f. b', 'f-b'>; select { - a := $a, - b := $b, - c := $c, - d := $d, - e := $e, - f := $f, - g := $g, - h := $h, - i := $i, - j := $j, - k := $k, - l := $l, - m := $m, - n := $n, - o := $o, - p := $p, - q := $q, - r := $r, - s := $s, - t := $t, - u := $u, - v := $v, - w := $w, - x := $x, - y := $y, - z := $z, - aa := $aa, - ab := $ab, - ac := $ac, - ad := $ad, - ae := $ae, - af := $af, - ag := $ag, - ah := $ah, - ai := $ai, - aj := $aj, - ak := >$ak, - al := >$al, - am := >$am, - an := >$an, - ao := >$ao, - ap := >$ap, - aq := >$aq, - ar := >$ar, - as_ := >$as_, - at := >$at, - au := >$au, - av := >$av, - aw := >$aw, - ax := >$ax, - ay := 1, - az := {}, - ba := MyEnum.This, - bb := {}, - bc := $bc, - bd := $bd, + a := $a, + b := $b, + c := $c, + d := $d, + e := $e, + f := $f, + g := $g, + h := $h, + i := $i, + j := $j, + k := $k, + l := $l, + m := $m, + n := $n, + o := $o, + p := $p, + q := $q, + r := $r, + s := $s, + t := $t, + u := $u, + v := $v, + w := $w, + x := $x, + y := $y, + z := $z, + aa := $aa, + ab := $ab, + ac := $ac, + ad := $ad, + ae := $ae, + af := $af, + ag := $ag, + ah := $ah, + ai := $ai, + aj := $aj, + ak := >$ak, + al := >$al, + am := >$am, + an := >$an, + ao := >$ao, + ap := >$ap, + aq := >$aq, + ar := >$ar, + as_ := >$as_, + at := >$at, + au := >$au, + av := >$av, + aw := >$aw, + ax := >$ax, + ay := 1, + az := {}, + ba := MyEnum.This, + bb := {}, + bc := $bc, + bd := $bd, + be := $be, + bf := $bf, }\ """, a=a, @@ -272,4 +278,6 @@ async def my_query( ax=ax, bc=bc, bd=bd, + be=be, + bf=bf, ) diff --git a/tests/codegen/test-project2/parpkg/subpkg/my_query_edgeql.py.assert b/tests/codegen/test-project2/parpkg/subpkg/my_query_edgeql.py.assert index c5a85ea8..78107409 100644 --- a/tests/codegen/test-project2/parpkg/subpkg/my_query_edgeql.py.assert +++ b/tests/codegen/test-project2/parpkg/subpkg/my_query_edgeql.py.assert @@ -82,6 +82,8 @@ class MyQueryResult: bb: typing.Optional[MyEnum] bc: array.array bd: typing.Optional[array.array] + be: array.array + bf: typing.Optional[array.array] def my_query( @@ -139,6 +141,8 @@ def my_query( ax: typing.Optional[edgedb.Range[datetime.date]] = None, bc: typing.Sequence[float], bd: typing.Optional[typing.Sequence[float]] = None, + be: typing.Sequence[float], + bf: typing.Optional[typing.Sequence[float]] = None, ) -> MyQueryResult: return executor.query_single( """\ @@ -146,62 +150,64 @@ def my_query( create scalar type MyEnum extending enum<'This', 'That', '1', 'f. b', 'f-b'>; select { - a := $a, - b := $b, - c := $c, - d := $d, - e := $e, - f := $f, - g := $g, - h := $h, - i := $i, - j := $j, - k := $k, - l := $l, - m := $m, - n := $n, - o := $o, - p := $p, - q := $q, - r := $r, - s := $s, - t := $t, - u := $u, - v := $v, - w := $w, - x := $x, - y := $y, - z := $z, - aa := $aa, - ab := $ab, - ac := $ac, - ad := $ad, - ae := $ae, - af := $af, - ag := $ag, - ah := $ah, - ai := $ai, - aj := $aj, - ak := >$ak, - al := >$al, - am := >$am, - an := >$an, - ao := >$ao, - ap := >$ap, - aq := >$aq, - ar := >$ar, - as_ := >$as_, - at := >$at, - au := >$au, - av := >$av, - aw := >$aw, - ax := >$ax, - ay := 1, - az := {}, - ba := MyEnum.This, - bb := {}, - bc := $bc, - bd := $bd, + a := $a, + b := $b, + c := $c, + d := $d, + e := $e, + f := $f, + g := $g, + h := $h, + i := $i, + j := $j, + k := $k, + l := $l, + m := $m, + n := $n, + o := $o, + p := $p, + q := $q, + r := $r, + s := $s, + t := $t, + u := $u, + v := $v, + w := $w, + x := $x, + y := $y, + z := $z, + aa := $aa, + ab := $ab, + ac := $ac, + ad := $ad, + ae := $ae, + af := $af, + ag := $ag, + ah := $ah, + ai := $ai, + aj := $aj, + ak := >$ak, + al := >$al, + am := >$am, + an := >$an, + ao := >$ao, + ap := >$ap, + aq := >$aq, + ar := >$ar, + as_ := >$as_, + at := >$at, + au := >$au, + av := >$av, + aw := >$aw, + ax := >$ax, + ay := 1, + az := {}, + ba := MyEnum.This, + bb := {}, + bc := $bc, + bd := $bd, + be := $be, + bf := $bf, }\ """, a=a, @@ -256,4 +262,6 @@ def my_query( ax=ax, bc=bc, bd=bd, + be=be, + bf=bf, ) diff --git a/tests/codegen/test-project2/scalar/custom_vector_input.edgeql b/tests/codegen/test-project2/scalar/custom_vector_input.edgeql index 519e755f..ce4fb593 100644 --- a/tests/codegen/test-project2/scalar/custom_vector_input.edgeql +++ b/tests/codegen/test-project2/scalar/custom_vector_input.edgeql @@ -1 +1,3 @@ -select 42 filter exists $input; +select 42 filter + exists $input0 + or exists $input1; diff --git a/tests/codegen/test-project2/scalar/custom_vector_input_async_edgeql.py.assert b/tests/codegen/test-project2/scalar/custom_vector_input_async_edgeql.py.assert index a16beb5e..1385d91b 100644 --- a/tests/codegen/test-project2/scalar/custom_vector_input_async_edgeql.py.assert +++ b/tests/codegen/test-project2/scalar/custom_vector_input_async_edgeql.py.assert @@ -7,17 +7,22 @@ import edgedb import typing -Input = typing.Sequence[float] +Input0 = typing.Sequence[float] +Input1 = typing.Sequence[float] async def custom_vector_input( executor: edgedb.AsyncIOExecutor, *, - input: typing.Optional[Input] = None, + input0: typing.Optional[Input0] = None, + input1: typing.Optional[Input1] = None, ) -> typing.Optional[int]: return await executor.query_single( """\ - select 42 filter exists $input;\ + select 42 filter + exists $input0 + or exists $input1;\ """, - input=input, + input0=input0, + input1=input1, ) diff --git a/tests/codegen/test-project2/scalar/custom_vector_input_async_edgeql.py.assert4 b/tests/codegen/test-project2/scalar/custom_vector_input_async_edgeql.py.assert4 index 39272b4f..89715622 100644 --- a/tests/codegen/test-project2/scalar/custom_vector_input_async_edgeql.py.assert4 +++ b/tests/codegen/test-project2/scalar/custom_vector_input_async_edgeql.py.assert4 @@ -7,17 +7,22 @@ import edgedb import typing +Sv3 = typing.Sequence[float] V3 = typing.Sequence[float] async def custom_vector_input( executor: edgedb.AsyncIOExecutor, *, - input: typing.Optional[V3] = None, + input0: typing.Optional[V3] = None, + input1: typing.Optional[Sv3] = None, ) -> typing.Optional[int]: return await executor.query_single( """\ - select 42 filter exists $input;\ + select 42 filter + exists $input0 + or exists $input1;\ """, - input=input, + input0=input0, + input1=input1, ) diff --git a/tests/codegen/test-project2/scalar/custom_vector_input_edgeql.py.assert b/tests/codegen/test-project2/scalar/custom_vector_input_edgeql.py.assert index 4cf4659a..8d096669 100644 --- a/tests/codegen/test-project2/scalar/custom_vector_input_edgeql.py.assert +++ b/tests/codegen/test-project2/scalar/custom_vector_input_edgeql.py.assert @@ -7,17 +7,22 @@ import edgedb import typing -Input = typing.Sequence[float] +Input0 = typing.Sequence[float] +Input1 = typing.Sequence[float] def custom_vector_input( executor: edgedb.Executor, *, - input: typing.Optional[Input] = None, + input0: typing.Optional[Input0] = None, + input1: typing.Optional[Input1] = None, ) -> typing.Optional[int]: return executor.query_single( """\ - select 42 filter exists $input;\ + select 42 filter + exists $input0 + or exists $input1;\ """, - input=input, + input0=input0, + input1=input1, ) diff --git a/tests/codegen/test-project2/scalar/custom_vector_input_edgeql.py.assert4 b/tests/codegen/test-project2/scalar/custom_vector_input_edgeql.py.assert4 index ed2947c0..6ca5de0b 100644 --- a/tests/codegen/test-project2/scalar/custom_vector_input_edgeql.py.assert4 +++ b/tests/codegen/test-project2/scalar/custom_vector_input_edgeql.py.assert4 @@ -7,17 +7,22 @@ import edgedb import typing +Sv3 = typing.Sequence[float] V3 = typing.Sequence[float] def custom_vector_input( executor: edgedb.Executor, *, - input: typing.Optional[V3] = None, + input0: typing.Optional[V3] = None, + input1: typing.Optional[Sv3] = None, ) -> typing.Optional[int]: return executor.query_single( """\ - select 42 filter exists $input;\ + select 42 filter + exists $input0 + or exists $input1;\ """, - input=input, + input0=input0, + input1=input1, ) diff --git a/tests/test_codegen.py b/tests/test_codegen.py index 6b041dbd..5f6e4425 100644 --- a/tests/test_codegen.py +++ b/tests/test_codegen.py @@ -34,12 +34,16 @@ class TestCodegen(tb.AsyncQueryTestCase): SETUP = ''' create extension pgvector; + create extension pgsparse; create scalar type v3 extending ext::pgvector::vector<3>; + create scalar type sv3 extending ext::pgsparse::vector<3>; ''' TEARDOWN = ''' drop scalar type v3; + drop scalar type sv3; drop extension pgvector; + drop extension pgsparse; ''' async def test_codegen(self):