-- Test: TEST025
-- @@@ START COPYRIGHT @@@
--
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements.  See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership.  The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License.  You may obtain a copy of the License at
--
--   http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied.  See the License for the
-- specific language governing permissions and limitations
-- under the License.
--
-- @@@ END COPYRIGHT @@@
--
-- Functionality: Tests identity cols functionality

?section ddl
drop schema s025 cascade;
drop table T025T001;
drop table T025T002;
drop table T025T00V2;
drop table T025T003 cascade;
drop table T025T004 cascade;
drop table T025T005;
drop table T025T006;
drop table T025T007;
drop table T025T008;
drop table T025T009;
drop table T025T010;
drop table T025T010s;

?section prep
cqd TRAF_USE_REGION_XN 'OFF';
create schema S025;
set schema S025;

log LOG025 clear;
--
?section positive_tests
--
-- create tables with IDENTITY Surrogate Key columns
--
-- IDENTITY column
 
CREATE TABLE T025T001 (a    LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) );
--
SHOWDDL T025T001;

-- Create new tables for Generated ALWAYS as SMALLINT
CREATE TABLE T025T002 (a    smallint unsigned
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
;

--
SHOWDDL T025T002;

drop table T025T002;

-- Create new tables for Generated ALWAYS for all types
-- Use combination of all default and NO MINVALUE and NO MAXVALUE

CREATE TABLE T025T002 (a    smallint unsigned
                        GENERATED ALWAYS AS IDENTITY
                             NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
;
                    
-- showddl
-- Confirm UNSIGNED SMALLINT MINVALUE and MAXVALUE
-- MINVALUE should be 1
-- MAXVALUE should be 65535
-- INCREMENT BY default should be 1
-- START WITH should be the MINVALUE
-- Should be NO CYCLE
 
showddl T025T002;                                     
drop table T025T002;

CREATE TABLE T025T002 (a    smallint unsigned
                        GENERATED ALWAYS AS IDENTITY
                        (NO MINVALUE
                         NO MAXVALUE)
                            NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
;
                    
-- showddl
-- Confirm UNSIGNED SMALLINT MINVALUE and MAXVALUE
-- MINVALUE should be 1
-- MAXVALUE should be 65535
-- INCREMENT BY default should be 1
-- START WITH should be the MINVALUE
-- Should be NO CYCLE
 
showddl T025T002;                                     
drop table T025T002;

-- Create new tables for Generated ALWAYS as LARGEINT
CREATE TABLE T025T002 (a    LARGEINT
                        GENERATED ALWAYS AS IDENTITY
                        (NO MINVALUE
                         NO MAXVALUE)
                            NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
;
                    
-- showddl
-- Confirm LARGEINT MINVALUE and MAXVALUE
-- MINVALUE should be 1
-- MAXVALUE should be 9223372036854775806
-- INCREMENT BY default should be 1
-- START WITH should be the MINVALUE
-- Should be NO CYCLE

showddl T025T002;
drop table T025T002;

-- Create new tables for Generated ALWAYS as LARGEINT
-- No SG options specified

CREATE TABLE T025T002 (a    LARGEINT
                        GENERATED ALWAYS AS IDENTITY
                            NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
;
                    
-- showddl
-- Confirm LARGEINT MINVALUE and MAXVALUE
-- MINVALUE should be 1
-- MAXVALUE should be 9223372036854775806
-- INCREMENT BY default should be 1
-- START WITH should be the MINVALUE
-- Should be NO CYCLE

showddl T025T002;
drop table T025T002;

-- Create new tables for Generated ALWAYS as SMALLINT UNSIGNED
CREATE TABLE T025T002 (a    SMALLINT UNSIGNED
                        GENERATED ALWAYS AS IDENTITY
                        (NO MINVALUE
                         NO MAXVALUE)
                            NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
;
                    
-- showddl
-- Confirm UNSIGNED INT MINVALUE and MAXVALUE
-- MINVALUE should be 1
-- MAXVALUE should be 65535
-- START WITH should be equal to MINVALUE
-- Should be NO CYCLE

showddl T025T002;
drop table T025T002; 
    
-- Create new tables for Generated ALWAYS as INT UNSIGNED
-- No SG options specified
CREATE TABLE T025T002 (a    INT UNSIGNED
                        GENERATED ALWAYS AS IDENTITY
                            NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
;
                    
-- showddl
-- Confirm UNSIGNED INT MINVALUE and MAXVALUE
-- MINVALUE should be 1
-- MAXVALUE should be 4294967295
-- INCREMENT BY default should be 1
-- START WITH should be the MINVALUE
-- CYCLE is NO

showddl T025T002;
drop table T025T002; 
                                                                     
-- Some negative testing

-- Expect error -1510
-- IDENTITY column can only be of type LARGEINT, SMALLINT UNSIGNED, INT UNSIGNED
CREATE TABLE T025T004 (a SMALLINT 
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60  
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                           NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
;

-- Expect error -1510
-- 64 bit column type can only be of type LARGEINT
CREATE TABLE T025T004 (a NUMERIC(2,0) 
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60  
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                           NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);

-- Expect error -1510
-- 64 bit column type can only be of type LARGEINT
CREATE TABLE T025T004 (a interval day(13) to second(0) 
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60  
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                           NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);

-- Expect syntax error
-- IDENTITY tokens are missing in the syntax
CREATE TABLE T025T004 (a LARGEINT 
                        --GENERATED ALWAYS AS IDENTITY
                         (START WITH 60  
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                           NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);


                    
-- Expect error -3427 duplicate option errors
CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60 START WITH 2
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                           NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                     
CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60  
                          INCREMENT BY 1 INCREMENT BY 2
                          MAXVALUE 100
                          MINVALUE 50
                           NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
 --HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                     
CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 60  
                          INCREMENT BY 1
                          MAXVALUE 100 MAXVALUE 30
                          MINVALUE 50
                           NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
 --HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                     
CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 60  
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50 MINVALUE 55
                           NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
 --HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                     
CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60  
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                           NO CYCLE NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
 --HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                    
 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60 START WITH 65 
                          INCREMENT BY 1 INCREMENT BY 2
                          MAXVALUE 100 MAXVALUE 110
                          MINVALUE 50 MINVALUE 40
                           NO CYCLE NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
 --HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);                            
                                                             
-- Expect error -1570
-- MAXVALUE must be greater than MINVALUE
CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 60
                          INCREMENT BY 1
                          MINVALUE 50
                          MAXVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
 --HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);

-- Expecting error -1570, MAXVALUE must be greater than the MINVALUE

CREATE TABLE T025T004 (a  SMALLINT UNSIGNED
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 60
                          INCREMENT BY 1
                          MAXVALUE 10
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
 --HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                          
                    
 -- Expect error -1571
 -- INCREMENT BY cannot be zero
 
 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 60 
                          INCREMENT BY 0
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);                   
                    
 -- Expect error -1573
 -- START WITH must be less than or equal to MAXVALUE
 -- and greater than or equal to the MINVALUE (for ascending SGs)
 
 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 6000 
                          INCREMENT BY 10
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                    
 -- Expect error -1573  
 -- START WITH must be less than or equal to MAXVALUE
 -- and greater than or equal to the MINVALUE (for ascending SGs)
 
 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 6000 
                          INCREMENT BY 10
                          MINVALUE 7000
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);  
                    
-- Expect error -1573
-- START WITH must be less than or equal to MAXVALUE
-- and greater than or equal to the MINVALUE (for ascending SGs)
  
 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 6000 
                          INCREMENT BY 10
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                    
-- Expect error -1573

 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 6000 
                          INCREMENT BY 10
                          MAXVALUE 100
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 
                 
-- Expect error -1573
                      
 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 10
                          MINVALUE 5000)
                          NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);                                                                                           
                    
-- Expect error -1575
-- With all data types having a base of zero,
-- test that INCREMENT BY is not greater than MAXVALUE

 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 60 
                          INCREMENT BY 1000
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);    
                    
-- Expect error -1576
-- The MAXVALUE input is greater than the maximum
-- allowed for that data type.
-- SMALLINT max is 65535

 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 50 
                          INCREMENT BY 1000
                          MAXVALUE 65536
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 
                    
-- Expect error -1576
-- The MAXVALUE input is greater than the maximum
-- allowed for that data type.
-- INT max is 4294967295

 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 4294967295 
                          INCREMENT BY 1000
                          MAXVALUE 4294967296
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);                    
                    
-- Expect error -1576
-- The MAXVALUE input is greater than the maximum
-- allowed for that data type.
-- LARGEINT max is 9223372036854775806

 CREATE TABLE T025T004 (a LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 60 
                          INCREMENT BY 1000
                          MAXVALUE 9223372036854775808
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 
                                                                                                                                           
-- Expect error -1570
-- The MINVALUE input is greater than the maximum
-- allowed for that data type.
-- SMALLINT max is 65535

 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 50 
                          INCREMENT BY 1000
                          MAXVALUE 65535
                          MINVALUE 65536
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 
                    
-- Expect error -1570
-- The MINVALUE input is greater than the maximum
-- allowed for that data type.
-- INT max is 4294967295

 CREATE TABLE T025T004 (a INT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 4294967295 
                          INCREMENT BY 1000
                          MAXVALUE 4294967295
                          MINVALUE 4294967296
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);                    
                    
-- Expect error -1570
-- The MINVALUE input is greater than the maximum
-- allowed for that data type.
-- LARGEINT max is 9223372036854775806

 CREATE TABLE T025T004 (a LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 60 
                          INCREMENT BY 1000
                          MAXVALUE 9223372036854775806
                          MINVALUE  9223372036854775807
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 

-- Expect error -1573
-- The START WITH input is greater than the maximum
-- allowed for that data type.
-- SMALLINT max is 65535

 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 65536 
                          INCREMENT BY 1000
                          MAXVALUE 65535
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 
                    
-- Expect error -1573
-- The START WITH input is greater than the maximum
-- allowed for that data type.
-- INT max is 4294967295

 CREATE TABLE T025T004 (a INT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 4294967296 
                          INCREMENT BY 1000
                          MAXVALUE 4294967295
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);                    
                    
-- Expect error -1576
-- The START WITH input is greater than the maximum
-- allowed for that data type.
-- LARGEINT max is 9223372036854775806

 CREATE TABLE T025T004 (a LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 9223372036854775808 
                          INCREMENT BY 1000
                          MAXVALUE 9223372036854775806
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 

-- Expect error -1575
-- The INCREMENT BY input is greater than the maximum
-- allowed for that data type.
-- SMALLINT max is 65535

 CREATE TABLE T025T004 (a SMALLINT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 1000 
                          INCREMENT BY 65536
                          MAXVALUE 65535
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 
                    
-- Expect error -1575
-- The INCREMENT BY input is greater than the maximum
-- allowed for that data type.
-- INT max is 4294967295

 CREATE TABLE T025T004 (a INT UNSIGNED
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 1000 
                          INCREMENT BY 4294967296
                          MAXVALUE 4294967295
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);                    

 -- Expect error -1575
 -- The INCREMENT BY input is greater than the maximum
 -- allowed for that data type.
 -- For a LARGEINT, 9223372036854775806 is the maximum INCREMENT BY value.

 CREATE TABLE T025T004 (a LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 1000 
                          INCREMENT BY 9223372036854775807
                          MAXVALUE 9223372036854775806
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 
                     
-- Expect -1572 to catch a negative input START WITH.
CREATE TABLE T025T004 (a LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH -1 
                          INCREMENT BY 1
                          MAXVALUE 9223372036854775806
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 
                                              
-- Expect -1572 to catch a negative input INCREMENT BY.
CREATE TABLE T025T004 (a LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 1000 
                          INCREMENT BY -1
                          MAXVALUE 9223372036854775806
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);    
                    
-- Expect -1572 to catch a negative input MINVALUE.
CREATE TABLE T025T004 (a LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 1000 
                          INCREMENT BY 1
                          MAXVALUE 9223372036854775806
                          MINVALUE -1
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);
                     
-- Expect -1572 to catch a negative input MAXVALUE.
CREATE TABLE T025T004 (a LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 1000 
                          INCREMENT BY 1
                          MAXVALUE -1
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 

-- Start INSERT testing

-- Use table T025T001 with the IDENTITY column built
-- with GENERATED BY DEFAULT with default sequence
-- generator default values

-- The first, second and fourth inserts use the DEFAULT keyword. 
-- The third, fifth and seventh inserts use a user supplied value.
-- The first, second, third, fourth and sixth
-- inserts should succeed.  The fifth and seventh inserts
-- should fail with -8102.

insert into T025T001 values(DEFAULT,1,1);
insert into T025T001 values(DEFAULT,2,2);
insert into T025T001 values(3333,3,3);

-- Insert another row using DEFAULT, this should succeed

insert into T025T001 values(DEFAULT,4,4);

-- Insert another row using the same user supplied value.
-- This should receive -8102 unique constraint error

insert into T025T001 values(3333,5,5);

-- Insert again, with a unique user supplied value.

insert into T025T001 values(6666,6,6);

-- Insert again, using a number assigned by SG.       
-- Should also receive -8102 error

insert into T025T001 values(2,7,7);

select * from T025T001 order by b,c;

-- Should succeed, an IDENTITY column of type
-- GENERATED BY DEFAULT should be updatable

update T025T001 set a = 25 where a = 2;

select * from T025T001 order by b,c;

-- First create a table with non-default start with,
-- minimum value and maximum value

-- First three inserts should succeed
-- Fourth insert should fail with -1579 MAXVALUE exceeded error

-- Create new tables for Generated ALWAYS as SMALLINT
CREATE TABLE T025T002 (a    smallint unsigned
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 80
                          INCREMENT BY 10
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
  --HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$);

insert into T025T002 (b,c) values(1,1);  
insert into T025T002 (b,c) values(2,2);
insert into T025T002 (b,c) values(3,3);  
insert into T025T002 (b,c) values(4,4);

select * from T025T002 order by b,c;

-- Insert testing Identity column is LARGEINT 
-- Looks like our true LARGEINT max is one minus the true max
-- Test all insert patterns of DEFAULT and user supplied values.

-- Table is GENERATED ALWAYS AS IDENTITY, so error -3428 should
-- be returned for user supplied values.

-- Error -3414 should be returned for mixed DEFAULT and user supplied
-- values.

-- The final insert values should receive -1579 MAXVALUE exceeded error


CREATE TABLE T025T003 (a    LARGEINT
                        GENERATED ALWAYS AS IDENTITY (START WITH 9223372036854775802)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED, primary key(a))
--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 

-- First insert should succeed

insert into T025T003 values(DEFAULT, 1,1),(DEFAULT, 2,2);

-- Should fail with error -3428

insert into T025T003 values(9223372036854775804,1,1);

-- Should fail with error -3428

insert into T025T003 values(9223372036854775804,1,1),(9223372036854775805,1,1);

-- Should fail with error -3428 to an update
-- for an IDENTITY column of type GENERATED ALWAYS

update T025T003 set a=300 where a=9223372036854775802;

-- Should fail with error -3428

insert into T025T003 values(DEFAULT,1,1), (9223372036854775804,1,1);

-- Insert should succeed
insert into T025T003(b,c) values(1,1),(2,2);

-- Insert should fail with MAXVALUE exceeded

insert into T025T003 (b,c) values(1,1),(2,2);

select * from T025T003 order by a,b,c;

-- Insert testing Identity column is UNSIGNED SMALLINT
-- First two inserts should succeed.
-- Third insert should receive -1579 MAXVALUE exceeded error

CREATE TABLE T025T004 (a    SMALLINT UNSIGNED
                        GENERATED ALWAYS AS IDENTITY (START WITH 65534)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED, primary key(a))

--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 

insert into T025T004 (b,c) values(1,1);
insert into T025T004 (b,c) values(2,2);
insert into T025T004 (b,c) values(3,3);

select * from T025T004 order by b,c;

-- Insert testing Identity column is UNSIGNED INTEGER
-- First four inserts should succeed.
-- Fifth/sixth insert should receive -1579 MAXVALUE exceeded error.

CREATE TABLE T025T005 (a    INTEGER UNSIGNED
                        GENERATED ALWAYS AS IDENTITY (START WITH 4294967291)

                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED, primary key(a))

--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 

-- Insert using DEFAULT for IDENTITY column

insert into T025T005 (b,c) values(1,1),(2,2);
insert into T025T005 (b,c) values(3,3);
insert into T025T005 (b,c) values(4,4);
insert into T025T005 (b,c) values(5,5),(6,6);


select * from T025T005 order by b,c;
drop table t025t005;

-- Insert testing Identity column is UNSIGNED INTEGER
-- The third value in the insert will reach the maximum.
-- The error should cause a rollback of the insert.
-- No rows should be inserted.
-- The insert should receive -1579 MAXVALUE exceeded error.

CREATE TABLE T025T005 (a    INTEGER UNSIGNED
                        GENERATED ALWAYS AS IDENTITY (START WITH 4294967294)

                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED, primary key(a));

-- Insert using DEFAULT for IDENTITY column

insert into T025T005 (b,c) values(1,1),(2,2),(3,3);


select * from T025T005 order by b,c;
drop table t025t005;

-- Insert testing Identity column is UNSIGNED INTEGER (with DEFAULT keyword)
-- First two inserts should succeed, but this will create a gap
-- which will disallow the remaining entries to the maximum.
-- The next insert should fail, leaving no orphans in the up or down queues.
-- The failue is -1579 MAXVALUE exceeded.

CREATE TABLE T025T005 (a    INTEGER UNSIGNED
                        GENERATED ALWAYS AS IDENTITY (START WITH 4294967291)

                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED, primary key(a))

--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 

insert into T025T005 values(DEFAULT,1,1),(DEFAULT,2,2);
insert into T025T005 (b,c) values(3,3),(4,4),(5,5),(6,6),(7,7),
                                 (8,8),(9,9),(10,10),(11,11);

select * from T025T005 order by b,c;

-- Check late name resolution
-- Prepare insert; drop and recreate table; execute prepared statement;
-- expect recompilation
--
prepare i1 from
insert into T025T005 (b,c) values(7,7);

DROP TABLE T025T005;
CREATE TABLE T025T005 (a    INTEGER UNSIGNED
                        GENERATED ALWAYS AS IDENTITY (START WITH 4294967291)

                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED, primary key(a))

--HASH2 PARTITION BY(a)
                    ;-- (ADD LOCATION $$partition$$); 

-- Execute i1, should cause recompilation and successful execution
execute i1;

-- Large inserts are only executed on NSK
-- NT does not always handle these large
-- inserts well

CREATE TABLE T025T006
  (
    A   INT NOT NULL
  , B  LARGEINT GENERATED BY DEFAULT AS IDENTITY (cache 1000)
       NOT NULL
  , C   INT NOT NULL
  , PRIMARY KEY (A)
  )
salt using 4 partitions;

--control query default def_num_smp_cpus '4';
control query shape esp_exchange(cut,4);

prepare ins06 from
upsert using load into T025T006(a, c)
select x1+x2*10+x3*100+x4*1000, x2
  from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) T(x4)
transpose 0,1,2,3,4,5,6,7,8,9 as x3
transpose 0,1,2,3,4,5,6,7,8,9 as x2
transpose 0,1,2,3,4,5,6,7,8,9 as x1;
control query shape cut;
--explain options 'f' ins06;

execute ins06;

-- Expect 10,000
select count(*) from T025T006;

-- Check for duplicates
-- Expect none.
select case when count(*) = 0 then '0' else '1' end from (select *
from (select b, offset(b, 1) b1 from T025T006 sequence by b) T
where b = b1);

-- Parallel Plans
CREATE TABLE T025T007 (a INTEGER UNSIGNED GENERATED ALWAYS AS IDENTITY 
                         (cache 1000)
                         NOT NULL NOT DROPPABLE,
                       b INT UNSIGNED NOT NULL,
                       c INT UNSIGNED,
                       primary key(a))
--salt using 4 partitions
;

CREATE TABLE T025T008 (a INTEGER UNSIGNED GENERATED ALWAYS AS IDENTITY
                         (cache 1000) 
                         NOT NULL NOT DROPPABLE,
                       b INT UNSIGNED NOT NULL,
                       c INT UNSIGNED,
                       primary key(a))
--salt using 4 partitions
;

--control query default def_num_smp_cpus '4';
control query shape esp_exchange (cut, 4);

prepare ins07 from
upsert using load into t025t007 (b,c)
select x1, x2
  from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) T
transpose 0,1,2,3,4,5,6,7,8,9 as x3
transpose 0,1,2,3,4,5,6,7,8,9 as x2
transpose 0,1,2,3,4,5,6,7,8,9 as x1
;
control query shape cut;
explain options 'f' ins07;

execute ins07;

-- Check for gaps - Expect 3.
select count(*)
from (select a, offset(a, 1) a1 from t025t007 sequence by a) T
where a - a1 > 2;

control query shape esp_exchange (cut, 4);
prepare ins08 from
upsert using load into t025t008(b,c) select b,c from t025t007;
control query shape cut;
explain options 'f' ins08;

execute ins08;

-- Check for gaps - Expect 3
select count(*)
from (select a, offset(a, 1) a1 from t025t008 sequence by a) T
where a - a1 > 2;

-- Utilities testing

drop table T025T003 cascade;
drop table T025T004 cascade;

-- CREATE TABLE LIKE

-- First GENERATED BY DEFAULT AS IDENTITY


CREATE TABLE T025T003 (a    LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                           ( MINVALUE 10
                             MAXVALUE 99999
                             START WITH 10)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) );

insert into T025T003 values(DEFAULT,1,1);
select * from T025T003;

CREATE TABLE T025T004 LIKE T025T003;

insert into T025T004 values(DEFAULT,1,1);
select * from T025T004 order by a;

showddl T025T003;
showddl T025T004;

drop table T025T003 cascade;
drop table T025T004 cascade;

-- Second GENERATED ALWAYS AS IDENTITY

CREATE TABLE T025T003 (a    LARGEINT
                        GENERATED ALWAYS AS IDENTITY
                           ( MINVALUE 10
                             MAXVALUE 99999
                             START WITH 10)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(a) )
                       ;

CREATE UNIQUE INDEX IT025T003 ON T025T003(A) no populate;

insert into T025T003 values(DEFAULT,1,1);
select * from T025T003 order by b,c;

CREATE TABLE T025T004 LIKE T025T003;

insert into T025T004 values(DEFAULT,1,1);
select * from T025T004 order by b,c;

showddl T025T003;
showddl T025T004;

-- Test populate index
populate index it025t003 on t025t003;

-- Constraint test looking for orphan entries

drop table T025T003 cascade;

create table T025T003 	
  (	
    c_surrogate_key LARGEINT 	
     GENERATED ALWAYS AS IDENTITY	
    NOT NULL NOT DROPPABLE heading 'identity col',	
   c_nationfkey    LARGEINT        not null not droppable,	
   c_custkey       int             not null not droppable, 	
   c_nationkey     int             not null not droppable, 	
   c_phone         char(15)        not null not droppable, 	
   c_acctbal       numeric(12,2)   not null not droppable, 	
   c_mktsegment    char(10)        not null not droppable, 	
   c_name          varchar(25)     not null not droppable, 	
   c_address       varchar(40)     not null not droppable, 	
   c_comment       varchar(117)    not null not droppable, 	
   primary key (c_surrogate_key)  not droppable , check (c_surrogate_key  > 52) 	
  ) 	
  store by ( c_surrogate_key  asc )	
  ;	
	
-- Should show 8101 check constr violation
	
insert into T025T003 values  	
(DEFAULT,-3,0,1,'dasf',2.1,'dfaf','dfa','dfa','d');
	
-- Should show 8101 check constr violation
	
insert into T025T003 values  	
(DEFAULT,-2,1,1,'dasf',2.1,'dfaf','dfa','dfa','d'),	
(DEFAULT,-1,2,1,'dasf',2.1,'dfaf','dfa','dfa','d');	

-- Should show zero rows

select * from T025T003;

drop table T025T002 cascade;
drop table T025T003 cascade;
drop table T025T004 cascade;

-- Alter table alter column set SG option testing
-- Test first with LARGEINT GENERATED ALWAYS AS IDENTITY column

CREATE TABLE T025T002 (surrogate_key    LARGEINT
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 98
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(surrogate_key) );


showddl T025T002;

-- Fourth insert should fail with -1579 MAXVALUE exceeded

insert into T025T002 values(default,1,1);
insert into T025T002 values(default,1,1);
insert into T025T002 values(default,1,1);
insert into T025T002 values(default,1,1);

select * from T025T002 order by surrogate_key,b,c;

-- Alter the table to allow a new MAXVALUE

alter table T025T002 alter column surrogate_key set MAXVALUE 900;

showddl T025T002;

-- Alter the table to again allow a new MAXVALUE

alter table T025T002 alter column surrogate_key set MAXVALUE 800;

showddl T025T002;

-- Alter the table to again allow a new INCREMENT BY

alter table T025T002 alter column surrogate_key set INCREMENT BY 2;

showddl T025T002;

-- New insert should succeed

insert into T025T002 values(default,1,1);

select * from T025T002 order by surrogate_key,b,c;

-- Negative testing

-- Should show -1592

alter table T025T002 alter column surrogate_key set MINVALUE 900;

-- Should show -1592

alter table T025T002 alter column surrogate_key set MINVALUE 900 MAXVALUE 900;

-- Should show -1577

alter table T025T002 alter column surrogate_key set MAXVALUE 99;

-- Should show -1572

alter table T025T002 alter column surrogate_key set MAXVALUE -1;

-- Should show -1576

alter table T025T002 alter column surrogate_key set MAXVALUE 9223372036854775808;

-- Should show -1590

alter table T025T002 alter column b set INCREMENT BY 900;

-- Should show -1009

alter table T025T002 alter column f set INCREMENT BY 900;

-- Should show -1572

alter table T025T002 alter column surrogate_key set INCREMENT BY -1;

-- Should show -1576

alter table T025T002 alter column surrogate_key set INCREMENT BY 9223372036854775808;

-- Should show -1575

alter table T025T002 alter column surrogate_key set INCREMENT BY 801;

-- Should show error -1571

alter table T025T002 alter column surrogate_key set INCREMENT BY 0;

-- Should same results as before negative testing

showddl T025T002;

alter table T025T002 alter column surrogate_key set NO MAXVALUE;
showddl t025t002;

-- repeat tests with column type of INT UNSIGNED GENERATED BY DEFAULT

CREATE TABLE T025T003 (b     INT UNSIGNED NOT NULL,
                       surrogate_key    int unsigned
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 98
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      c     INT UNSIGNED,
                      primary key(surrogate_key) );

insert into T025T003 values(1,default,1);

showddl T025T003;

insert into T025T003 values(1,default,1);
insert into T025T003 values(1,default,1);

-- Should fail with -1579

insert into T025T003 values(1,default,1);

select * from T025T003 order by b,surrogate_key,c;

alter table T025T003 alter column surrogate_key set MAXVALUE 900;

showddl T025T003;

alter table T025T003 alter column surrogate_key set MAXVALUE 800;

showddl T025T003;

-- Should succeed

insert into T025T003 values(1,default,1);

select * from T025T003 order by b,surrogate_key,c;

-- Should show -1575

alter table T025T003 alter column surrogate_key set INCREMENT BY 4294967296;

-- Should show -1576

alter table T025T003 alter column surrogate_key set MAXVALUE 4294967296;

-- repeat tests with column type of INT UNSIGNED

CREATE TABLE T025T004 (b     INT UNSIGNED NOT NULL,
                       surrogate_key    smallint unsigned
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 98
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      c     INT UNSIGNED,
                      primary key(b) );

insert into T025T004 values(1,default,1);

showddl T025T004;

insert into T025T004 values(2,default,1);
insert into T025T004 values(3,default,1);

-- Should fail with -1579

insert into T025T004 values(4,default,1);

select * from T025T004 order by b,surrogate_key,c;

alter table T025T004 alter column surrogate_key set MAXVALUE 900;

showddl T025T004;

alter table T025T004 alter column surrogate_key set MAXVALUE 800;

showddl T025T004;

-- Should succeed

insert into T025T004 values(5,default,1);

select * from T025T004 order by b,surrogate_key,c;

-- Should show -1575

alter table T025T004 alter column surrogate_key set INCREMENT BY 65536;

-- Should show -1576

alter table T025T004 alter column surrogate_key set MAXVALUE 65536;

-- Test largeint error handling

drop table T025T002 cascade;

CREATE TABLE T025T002 (surrogate_key    LARGEINT
                        GENERATED ALWAYS AS IDENTITY
                         (START WITH 9223372036854775800
                          INCREMENT BY 1
                          MAXVALUE 9223372036854775801
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(surrogate_key) )
--HASH2 PARTITION BY(surrogate_key)
                    ;-- (ADD LOCATION $$partition$$); 

prepare s1 from
insert into T025T002 (b,c) values(1,1);

-- Both should succeed
insert into T025T002 values(default,1,1);
insert into T025T002 values(default,1,1);

-- Should fail
insert into T025T002 values(default,1,1);

-- alter the table to a new maximum, but expect failure
alter table T025T002 alter column surrogate_key set MAXVALUE 10;

-- alter the table to a new maximum, should succeed

alter table T025T002 alter column surrogate_key set MAXVALUE 9223372036854775805; 

-- execute should cause a recompilation and it should succeed

execute s1;

select * from T025T002 order by surrogate_key, b,c;

-- Test single IDENTITY column table expecting error -3431

drop table T025T002 cascade;

-- Test GENERATED ALWAYS AS single column table

CREATE TABLE T025T002 (surrogate_key    LARGEINT
                        GENERATED ALWAYS AS IDENTITY
                          NOT NULL NOT DROPPABLE,
                      primary key(surrogate_key) );

insert into T025T002 values(DEFAULT),(DEFAULT);

drop table T025T002 cascade;

-- Test GENERATED BY DEFAULT AS single column table

CREATE TABLE T025T002 (surrogate_key    LARGEINT
                        GENERATED BY DEFAULT AS IDENTITY
                          NOT NULL NOT DROPPABLE,
                      primary key(surrogate_key) );

insert into T025T002 values(DEFAULT),(DEFAULT);

-- CREATE VOLATILE TABLE testing

CREATE VOLATILE TABLE T025T00V2 (surrogate_key    smallint unsigned
                        GENERATED BY DEFAULT AS IDENTITY
                         (START WITH 98
                          INCREMENT BY 1
                          MAXVALUE 100
                          MINVALUE 50
                          NO CYCLE)
                           NOT NULL NOT DROPPABLE,
                      b     INT UNSIGNED NOT NULL,
                      c     INT UNSIGNED,
                      primary key(surrogate_key) );

showddl T025T00V2;
invoke T025T00V2;

-- Fourth insert should fail

insert into T025T00V2(b,c) values(1,1);
insert into T025T00V2 values(default,1,1);
insert into T025T00V2 values(default,1,1);
insert into T025T00V2 values(default,1,1);

-- salted identity columns
create table t025t009(a largeint generated by default as identity not null primary key, b int) salt using 4 partitions;
showddl t025t009;
upsert using load into t025t009 values (default, 1), (default, 2);
insert into t025t009 values (default, 1), (default, 2);
upsert into t025t009 values (default, 1), (default, 2);
select "_SALT_", a, b from t025t009;

-- identity cols and default values
create table T025T010 (a largeint generated always as identity not null primary key, 
                         b int default 10);
create table T025T010s (a largeint generated always as identity not null primary key, 
                         b int default 10) 
  salt using 4 partitions;

prepare s from insert into T025T010 default values;
prepare s from insert into T025T010 values (default, default);
prepare s from insert into T025T010 values (default, default+1);
prepare s from insert into T025T010 (a) values (default);
prepare s from insert into T025T010 (b) values (2);

prepare s from insert into T025T010s default values;
prepare s from insert into T025T010s values (default, default);
prepare s from insert into T025T010 values (default, default+1);
prepare s from insert into T025T010s (a) values (default);
prepare s from insert into T025T010s (b) values (2);

prepare s from insert into T025T010 (b) select b from T025T010s;

-- identity cols default value negative tests, should return error 3428
prepare s from insert into T025T010 (a) values (1);
prepare s from insert into T025T010 values (default+1, default);
prepare s from insert into T025T010 (a) values (default+1);
prepare s from insert into T025T010s (a) values (1);
prepare s from insert into T025T010s values (default+1, default);
prepare s from insert into T025T010s (a) values (default+1);
prepare s from insert into T025T010 (a) select a from T025T010s;

-- identity col cannot be added
alter table t025t010 add column c largeint generated by default as identity;

-- drop of table with identity cols
insert into t025t010 default values;
select * from t025t010;
alter table t025t010 drop column b;
invoke t025t010;
select * from t025t010;

-- this alter drop column should fail
alter table t025t010 drop column a;

-- reset option cannot be used during create
create table t025t011 (a largeint generated by default as identity (start with 10 reset) not null);

-- reset option can be used with an alter
create table t025t011 (a largeint generated by default as identity(no cache) not null);
insert into t025t011 default values;
insert into t025t011 default values;
select * from t025t011 order by a;
alter table t025t011 alter column a reset;
insert into t025t011 default values;
-- should return 1,1,2
select * from t025t011 order by a;


-- Clean up test

drop table T025T001;
drop table T025T002;
drop table T025T00V2;
drop table T025T003 cascade;
drop table T025T004 cascade;
drop table T025T005;
drop table T025T006;
drop table T025T007;
drop table T025T008;
drop table T025T009;
drop table T025T010;
drop table T025T010s;
drop schema s025 cascade;


