- 
                Notifications
    You must be signed in to change notification settings 
- Fork 962
Open
Labels
📚 postgresql🔧 golangenhancementNew feature or requestNew feature or requestfutureIn the year 3000...In the year 3000...
Description
While working on a solution for #364 which is based on SQL functions, I hit the following problem.
Arguments for SQL functions in PostgreSQL are nullable by default. With CALLED ON NULL INPUT, this can even be explicitly stated, but this is ignored by sqlc.
Given the following definition for PostgreSQL:
CREATE TABLE foo (
            id     INTEGER,
            bar    varchar(100)
);
INSERT INTO foo VALUES (null, 'foo'), (1, 'bar');
CREATE OR REPLACE FUNCTION select1(_id INTEGER)
  RETURNS SETOF foo as
$func$
BEGIN
  IF _id IS NULL THEN
    RETURN QUERY EXECUTE 'select * from foo where id IS NULL';
  ELSE
    RETURN QUERY EXECUTE FORMAT('select * from foo where id = %L', _id);
  END IF;
END
$func$ LANGUAGE plpgsql CALLED ON NULL INPUT;the following SQL calls are valid:
select select1(null);
select select1(1);With the query definition:
-- name: GetSelect1 :many
SELECT select1($1);the following Go method signature is generated:
func (q *Queries) GetSelect1(ctx context.Context, ID int32) ([]interface{}, error) {With this method signature it is not possible to pass nil (or SQL null) as argument for ID.
Update: fix typo
Metadata
Metadata
Assignees
Labels
📚 postgresql🔧 golangenhancementNew feature or requestNew feature or requestfutureIn the year 3000...In the year 3000...