go-jet / jet

Type safe SQL builder with code generation and automatic query result data mapping
Apache License 2.0
2.36k stars 114 forks source link

Add values functions #69

Open Sytten opened 3 years ago

Sytten commented 3 years ago

I was trying to do something similar to https://stackoverflow.com/questions/34708509/how-to-use-returning-with-on-conflict-in-postgresql/42217872#42217872

WITH input_rows(usr, contact, name) AS (
   VALUES
      (text 'foo1', text 'bar1', text 'bob1')  -- type casts in first row
    , ('foo2', 'bar2', 'bob2')
    -- more?
   )

But I don't think there is a VALUES function.

Sytten commented 3 years ago

Looking at it, the WRAP function will be needed for that https://github.com/go-jet/jet/pull/67

go-jet commented 3 years ago

Yeah, VALUES statement is not implemented yet. SELECT can be used for one row and SELECT with UNION ALL can be used for multiple rows. For instance:

input_rows := CTE("input_rows")

stmt := WITH(
    input_rows.AS(
        UNION_ALL(
                        // first row columns has to be aliased
            SELECT(String("foo1").AS("foo"), String("bar1").AS("bar"), String("bob1").AS("bob")),
            SELECT(String("foo2"), String("bar2"), String("bob2")),
        ),
    ),
)(
    SELECT(input_rows.AllColumns()).
        FROM(input_rows),
)