lwtdev commented on issue #6497:
URL: https://github.com/apache/shardingsphere/issues/6497#issuecomment-696593223


   These test case information.
   - prepare sql
   
   ```sql
   -- create databases
   create database spsqltest_sharding_00;
   create database spsqltest_sharding_01;
   
   -- create logic tables
   
   -- @title:createTableCustomer
   CREATE TABLE `customer` (
     `id` bigint(20) NOT NULL COMMENT '主键ID',
     `party_id` bigint(20) NOT NULL COMMENT '用户ID',
     PRIMARY KEY (`id`),
     KEY `party_id_index` (`party_id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户表';
   
   -- @title:createTableCustomerEmail
   CREATE TABLE customer_email (
     id bigint(20) NOT NULL COMMENT '主键ID',
     party_id bigint(20) NOT NULL COMMENT '用户ID',
     PRIMARY KEY (`id`),
     KEY `party_id_index` (`party_id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户邮箱表';
   
   create table IF NOT EXISTS full_table
   (
      id bigint(15) not null auto_increment primary key comment 'primary key',
       name varchar(255)  default 'tom' COLLATE utf8_bin comment 'name',
       class_id bigint(15) references class(id) on delete cascade,
       age int,
       t_bl bool,
       t_ti tinyint(1),
       t_si smallint(2),
       t_mi middleint(10),
       t_it int(10),
       t_bi bigint(20),
       t_dec decimal(15,2),
       t_ft float(5),
       t_db double(10,2),
       t_dt date,
       t_te time,
       t_de datetime,
       t_ts timestamp,
       t_yr year,
       t_ch char(10),
       t_vh varchar(255),
       t_by binary(2),
       t_vb varbinary(25),
       t_tb tinyblob,
       t_mb mediumblob,
       t_bb blob,
       t_lb longblob,
       t_tt tinytext,
       t_mt mediumtext,
       t_tx text,
       t_lt longtext,
       t_em enum('a', 'b') character set utf8 collate utf8_bin,
       t_st set('a', 'b'),
       t_gy geometry,
       t_pt point,
       t_ls linestring,
       t_pn polygon,
       t_mp multipoint,
       t_ml multilinestring,
       t_mn multipolygon,
       t_gn geometrycollection,
       t_jn json,
       index indx_name_and_class using hash (class_id, name(20) desc) ,
       index idx_class_id using btree (class_id asc) ,
       constraint unique key (age),
       check (age > 0)
   ) engine InnoDB  CHARACTER SET utf8 COLLATE utf8_bin
   auto_increment = 100 checksum 1
   compression = 'none'
   delay_key_write = 0
   max_rows = 1000
   min_rows = 1
   pack_keys = 0
   password = 'abc'
   STATS_AUTO_RECALC  = 0
   STATS_PERSISTENT  = 1
   STATS_SAMPLE_PAGES  = 4
   ROW_FORMAT=REDUNDANT
   union (class);
   
   ```
   - sharding config
   ```yaml
   schemaName: spsqltest_sharding
   #
   dataSourceCommon:
     username: root
     password: root135
     connectionTimeoutMilliseconds: 30000
     idleTimeoutMilliseconds: 60000
     maxLifetimeMilliseconds: 1800000
     maxPoolSize: 50
     minPoolSize: 1
     maintenanceIntervalMilliseconds: 30000
   #
   dataSources:
     ds_00:
       url: 
jdbc:mysql://127.0.0.1:3306/spsqltest_sharding_00?serverTimezone=UTC&useSSL=false
     ds_01:
       url: 
jdbc:mysql://127.0.0.1:3306/spsqltest_sharding_01?serverTimezone=UTC&useSSL=false
   #
   rules:
   - !SHARDING
     tables:
       customer:
         actualDataNodes: ds_00.customer_000${0..1},ds_01.customer_000${2..3}
         databaseStrategy:
           standard:
             shardingColumn: id
             shardingAlgorithmName: database_inline
         tableStrategy:
           standard:
             shardingColumn: id
             shardingAlgorithmName: customer_inline
         keyGenerateStrategy:
           column: id
           keyGeneratorName: snowflake
       customer_email:
         actualDataNodes: 
ds_00.customer_email_000${0..1},ds_01.customer_email_000${2..3}
         databaseStrategy:
           standard:
             shardingColumn: id
             shardingAlgorithmName: database_inline
         tableStrategy:
           standard:
             shardingColumn: id
             shardingAlgorithmName: customer_email_inline
         keyGenerateStrategy:
           column: id
           keyGeneratorName: snowflake
       full_table:
         actualDataNodes: 
ds_00.full_table_000${0..1},ds_01.full_table_000${2..3}
         databaseStrategy:
           standard:
             shardingColumn: id
             shardingAlgorithmName: database_inline
         tableStrategy:
           standard:
             shardingColumn: id
             shardingAlgorithmName: full_table_inline
         keyGenerateStrategy:
           column: id
           keyGeneratorName: snowflake
     bindingTables:
       - customer,customer_email,full_table
     defaultDatabaseStrategy:
       none:
     defaultTableStrategy:
       none:
   
     shardingAlgorithms:
       database_inline:
         type: INLINE
         props:
           algorithm-expression: ds_0${(id % 4 ).intdiv(2)}
       customer_inline:
         type: INLINE
         props:
           algorithm-expression: customer_000${id % 4}
       customer_email_inline:
         type: INLINE
         props:
           algorithm-expression: customer_email_000${id % 4}
       full_table_inline:
         type: INLINE
         props:
           algorithm-expression: full_table_000${id % 4}
   ```
   - subquery test case sql
   ```sql
   
   -- @title:subqueryAsScalarOperand,hasShardingKey:none
   SELECT (SELECT name FROM customer);
   
   -- @title:subqueryAsScalarOperand,hasShardingKey:all
   SELECT (SELECT name FROM customer where id = 3);
   
   -- @title:subqueryInColumns,hasShardingKey:none
   SELECT id AS c_id , (select status FROM customer_email ce WHERE ce.party_id 
= c.party_id) AS ec_status FROM customer c;
     
   -- @title:subqueryInColumns,hasShardingKey:single
   SELECT id AS c_id , (select status FROM customer_email ce WHERE ce.party_id 
= c.party_id) AS ec_status FROM customer c WHERE id = 3;
     
   -- @title:subqueryInColumns,hasShardingKey:all
   SELECT id AS c_id , (select status FROM customer_email ce WHERE ce.party_id 
= c.party_id and id = 3) AS ec_status FROM customer c WHERE id = 3;
   
   -- @title:subqueryInComparisons,hasShardingKey:none
   SELECT * FROM customer WHERE status < (SELECT MAX(status) FROM 
customer_email);
     
   -- @title:subqueryInComparisons,hasShardingKey:single
   SELECT * FROM customer WHERE status < (SELECT MAX(status) FROM 
customer_email) and id = 3;
     
   -- @title:subqueryInComparisons,hasShardingKey:all
   SELECT * FROM customer WHERE status < (SELECT MAX(status) FROM 
customer_email where id = 3) and id = 3;
   
   -- @title:subqueryWithAny,hasShardingKey:none
   SELECT * FROM customer WHERE status = ANY (SELECT status FROM 
customer_email);
   
   -- @title:subqueryWithAny,hasShardingKey:single
   SELECT * FROM customer WHERE status = ANY (SELECT status FROM 
customer_email) and id = 3;
   
   -- @title:subqueryWithAny,hasShardingKey:all
   SELECT * FROM customer WHERE status = ANY (SELECT status FROM customer_email 
where id = 3) and id = 3;
   
   -- @title:subqueryWithAll,hasShardingKey:none
   SELECT * FROM customer WHERE status > ALL (SELECT status FROM 
customer_email);
   
   -- @title:subqueryWithAll,hasShardingKey:single
   SELECT * FROM customer WHERE status > ALL (SELECT status FROM 
customer_email) and id = 3;
   
   -- @title:subqueryWithAll,hasShardingKey:all
   SELECT * FROM customer WHERE status > ALL (SELECT status FROM customer_email 
where id = 3) and id = 3;
   
   -- @title:subqueryAsRowSubquery,hasShardingKey:none
   SELECT * FROM customer WHERE (party_id, status) = (SELECT party_id, status 
FROM customer_email WHERE party_id = 10);
   
   -- @title:subqueryAsRowSubquery,hasShardingKey:single
   SELECT * FROM customer WHERE (party_id, status) = (SELECT party_id, status 
FROM customer_email WHERE party_id = 10) and id = 3;
   
   -- @title:subqueryAsRowSubquery,hasShardingKey:all
   SELECT * FROM customer WHERE (party_id, status) = (SELECT party_id, status 
FROM customer_email WHERE party_id = 10 and id = 3) and id = 3;
   
   -- @title:subqueryWithNotExist,hasShardingKey:none
   SELECT * FROM customer where not exists (select * from customer_email where 
c.status = status);
   
   -- @title:subqueryWithNotExist,hasShardingKey:single
   SELECT * FROM customer where not exists (select * from customer_email where 
c.status = status) and id = 3;
   
   -- @title:subqueryWithNotExist,hasShardingKey:all
   SELECT * FROM customer where not exists (select * from customer_email where 
c.status = status and id = 3) and id = 3;
   
   -- @title:subqueryWithIn,hasShardingKey:none
   SELECT * FROM customer c WHERE status in (SELECT status FROM customer_email);
   
   -- @title:subqueryWithIn,hasShardingKey:single
   SELECT * FROM customer c WHERE status in (SELECT status FROM customer_email) 
AND id = 3;
   
   -- @title:subqueryWithIn,hasShardingKey:all
   SELECT * FROM customer c WHERE status in (SELECT status FROM customer_email 
WHERE id = 3 ) AND id = 3;
   
   -- @title:subqueryAsCorrelatedSubquery,hasShardingKey:none
   SELECT * FROM customer WHERE status = ANY (SELECT status FROM customer_email 
WHERE customer.party_id = customer_email);
   
   -- @title:subqueryAsCorrelatedSubquery,hasShardingKey:single
   SELECT * FROM customer WHERE status = ANY (SELECT status FROM customer_email 
WHERE customer.party_id = customer_email) and id = 3;
   
   -- @title:subqueryAsCorrelatedSubquery,hasShardingKey:all
   SELECT * FROM customer WHERE status = ANY (SELECT status FROM customer_email 
WHERE customer.party_id = customer_email.party_id and id = 3) and id = 3;
   
   -- @title:subqueryAsDerivedTableInFromClause,hasShardingKey:none
   SELECT sbf1, sbf2 FROM (SELECT party_id AS sbf1, status AS sbf2 FROM 
customer) AS sb WHERE sbf2 > 1;
   
   -- @title:subqueryAsDerivedTableInFromClause,hasShardingKey:all
   SELECT sbf1, sbf2 FROM (SELECT party_id AS sbf1, status AS sbf2 FROM 
customer where id = 3) AS sb WHERE sbf2 > 1;
   
   -- @title:subqueryAsDerivedTableWithCount,hasShardingKey:none
   SELECT COUNT(*) FROM (SELECT * FROM customer) AS t;
   
   -- @title:subqueryAsDerivedTableWithCount,hasShardingKey:all
   SELECT COUNT(*) FROM (SELECT * FROM customer WHERE id = 3) AS t;
   
   -- @title:subqueryInLeftJoin,hasShardingKey:none 
   SELECT * FROM customer LEFT JOIN (SELECT party_id, status FROM 
customer_email WHERE is_deleted = 'N') email ON email.party_id = 
cusomter.party_id;
   
   -- @title:subqueryInLeftJoin,hasShardingKey:single
   SELECT * FROM customer LEFT JOIN (SELECT party_id, status FROM 
customer_email WHERE is_deleted = 'N') email ON email.party_id = 
cusomter.party_id and customer.id = 3;
   
   -- @title:subqueryInLeftJoin,hasShardingKey:all
   SELECT * FROM customer LEFT JOIN (SELECT party_id, status FROM 
customer_email WHERE is_deleted = 'N' and id = 3) email ON email.party_id = 
cusomter.party_id and customer.id = 3;
   
   -- @title:subqueryInSubquery,hasShardingKey:none
   SELECT * FROM customer c WHERE status > (SELECT status FROM customer_email 
WHERE party_id > (SELECT id FROM full_table) LIMIT 1);
   
   -- @title:subqueryInSubquery,hasShardingKey:single
   SELECT * FROM customer c WHERE status > (SELECT status FROM customer_email 
WHERE party_id > (SELECT id FROM full_table) LIMIT 1) AND id = 3;
   
   -- @title:subqueryInSubquery,hasShardingKey:all
   SELECT * FROM customer c WHERE status > (SELECT status FROM customer_email 
WHERE id = 3 AND party_id > (SELECT id FROM full_table WHERE id = 3) LIMIT 1) 
AND id = 3;
   ```


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to