-- insert
insert into products values (1, 'Cheese', 9.99);

insert into products (product_no, name, price) values (1, 'Cheese', 9.99);

insert into products (name, price, product_no) values ('Cheese', 9.99, 1);

insert into products default values;

insert into products (product_no, name, price) values
    (1, 'Cheese', 9.99),
    (2, 'Bread', 1.99),
    (3, 'Milk', 2.99);


insert into products (product_no, name, price)
  select product_no, name, price from new_products
    where release_date = 'today';


-- schema_from_docs
with recursive t as (
  select *
)
insert into t as foo(a, b, c)
overriding system value select 1;

-- pg_docs_examples
INSERT INTO films VALUES
    ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

INSERT INTO films VALUES
    ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes');
INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');

INSERT INTO films DEFAULT VALUES;

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
    ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';

-- Create an empty 3x3 gameboard for noughts-and-crosses
INSERT INTO tictactoe (game, board[1:3][1:3])
    VALUES (1, '{{" "," "," "},{" "," "," "},{" "," "," "}}');
-- The subscripts in the above example aren't really needed
INSERT INTO tictactoe (game, board)
    VALUES (2, '{{X," "," "},{" ",O," "},{" ",X," "}}');

INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets')
   RETURNING did;

WITH upd AS (
  UPDATE employees SET sales_count = sales_count + 1 WHERE id =
    (SELECT sales_person FROM accounts WHERE name = 'Acme Corporation')
    RETURNING *
)
INSERT INTO employees_log SELECT *, current_timestamp FROM upd;

INSERT INTO distributors (did, dname)
    VALUES (5, 'Gizmo Transglobal'), (6, 'Associated Computing, Inc')
    ON CONFLICT (did) DO UPDATE SET dname = EXCLUDED.dname;

INSERT INTO distributors (did, dname) VALUES (7, 'Redline GmbH')
    ON CONFLICT (did) DO NOTHING;

insert into t (a, b, c) values (1, 2, 3)
    on conflict (a, b) do nothing;

-- Don't update existing distributors based in a certain ZIP code
INSERT INTO distributors AS d (did, dname) VALUES (8, 'Anvil Distribution')
    ON CONFLICT (did) DO UPDATE
    SET dname = EXCLUDED.dname || ' (formerly ' || d.dname || ')'
    WHERE d.zipcode <> '21201';

-- Name a constraint directly in the statement (uses associated
-- index to arbitrate taking the DO NOTHING action)
INSERT INTO distributors (did, dname) VALUES (9, 'Antwerp Design')
    ON CONFLICT ON CONSTRAINT distributors_pkey DO NOTHING;

-- This statement could infer a partial unique index on "did"
-- with a predicate of "WHERE is_active", but it could also
-- just use a regular unique constraint on "did"
INSERT INTO distributors (did, dname) VALUES (10, 'Conrad International')
    ON CONFLICT (did) WHERE is_active DO NOTHING;

-- with schema
insert into s.t (c) values (1);


-- regression check for issue #718
-- we were parsing the `on conflict` as the start of a `join on`
INSERT INTO t
SELECT *
FROM t
CROSS JOIN f
ON CONFLICT
  DO NOTHING;

insert into t 
select * from u join i 
on conflict = conflict
on conflict
  do nothing;

insert into t 
select * from u join i 
on conflict = conflict
on conflict (foo)
  do nothing;

insert into t 
select * from u join i 
on conflict = conflict
on conflict
  on constraint temporal_rng_pk do nothing;

-- on conflict do select
INSERT INTO t (a) VALUES (1)
    ON CONFLICT (a) DO SELECT FOR UPDATE WHERE a > 0 RETURNING *;
