Skip to content

Commit

Permalink
planner: fix the issue accessing unnecessary table side caused by col…
Browse files Browse the repository at this point in the history
…umn pruning (#55161)

close #54213
  • Loading branch information
qw4990 committed Aug 2, 2024
1 parent 9f7e0f1 commit d0b9c09
Show file tree
Hide file tree
Showing 12 changed files with 200 additions and 57 deletions.
17 changes: 7 additions & 10 deletions pkg/planner/core/casetest/hint/testdata/integration_suite_out.json
Original file line number Diff line number Diff line change
Expand Up @@ -799,16 +799,13 @@
"HashAgg 16000.00 root group by:Column#41, funcs:firstrow(Column#41)->Column#41",
"└─Union 1000000010000.00 root ",
" ├─HashJoin 1000000000000.00 root CARTESIAN inner join",
" │ ├─TableReader(Build) 10000.00 root data:TableFullScan",
" │ │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo",
" │ └─Projection(Probe) 100000000.00 root 1->Column#55",
" │ └─HashJoin 100000000.00 root CARTESIAN inner join",
" │ ├─Projection(Build) 10000.00 root 1->Column#54",
" │ │ └─IndexReader 10000.00 root index:IndexFullScan",
" │ │ └─IndexFullScan 10000.00 cop[tikv] table:t3, index:idx_a(a) keep order:false, stats:pseudo",
" │ └─Projection(Probe) 10000.00 root 1->Column#53",
" │ └─IndexReader 10000.00 root index:IndexFullScan",
" │ └─IndexFullScan 10000.00 cop[tikv] table:t2, index:idx_a(a) keep order:false, stats:pseudo",
" │ ├─IndexReader(Build) 10000.00 root index:IndexFullScan",
" │ │ └─IndexFullScan 10000.00 cop[tikv] table:t3, index:idx_a(a) keep order:false, stats:pseudo",
" │ └─HashJoin(Probe) 100000000.00 root CARTESIAN inner join",
" │ ├─IndexReader(Build) 10000.00 root index:IndexFullScan",
" │ │ └─IndexFullScan 10000.00 cop[tikv] table:t2, index:idx_a(a) keep order:false, stats:pseudo",
" │ └─TableReader(Probe) 10000.00 root data:TableFullScan",
" │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo",
" └─TableReader 10000.00 root data:TableFullScan",
" └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo"
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3749,9 +3749,9 @@
"SQL": "explain select * from t WHERE TRUE = ALL ( SELECT TRUE GROUP BY 1 LIMIT 1 ) IS NULL IS NOT NULL;",
"Plan": [
"HashJoin_14 10000.00 root CARTESIAN inner join",
"├─StreamAgg_19(Build) 1.00 root funcs:count(1)->Column#13",
"├─StreamAgg_19(Build) 1.00 root funcs:count(1)->Column#12",
"│ └─Limit_22 1.00 root offset:0, count:1",
"│ └─HashAgg_23 1.00 root group by:1, ",
"│ └─HashAgg_23 1.00 root group by:1, funcs:firstrow(1)->Column#13",
"│ └─TableDual_24 1.00 root rows:1",
"└─TableReader_17(Probe) 10000.00 root data:TableFullScan_16",
" └─TableFullScan_16 10000.00 cop[tikv] table:t keep order:false, stats:pseudo"
Expand All @@ -3762,11 +3762,11 @@
"SQL": "explain select * from t WHERE TRUE = ALL ( SELECT TRUE from t GROUP BY 1 LIMIT 1 ) is null is not null;",
"Plan": [
"HashJoin_14 10000.00 root CARTESIAN inner join",
"├─StreamAgg_19(Build) 1.00 root funcs:count(1)->Column#16",
"├─StreamAgg_19(Build) 1.00 root funcs:count(1)->Column#15",
"│ └─Limit_22 1.00 root offset:0, count:1",
"│ └─HashAgg_27 1.00 root group by:Column#17, funcs:firstrow(Column#18)->test.t.a, funcs:firstrow(Column#19)->test.t.b, funcs:firstrow(Column#20)->test.t._tidb_rowid",
"│ └─HashAgg_27 1.00 root group by:Column#17, funcs:firstrow(Column#18)->Column#16",
"│ └─TableReader_28 1.00 root data:HashAgg_23",
"│ └─HashAgg_23 1.00 cop[tikv] group by:1, funcs:firstrow(test.t.a)->Column#18, funcs:firstrow(test.t.b)->Column#19, funcs:firstrow(test.t._tidb_rowid)->Column#20",
"│ └─HashAgg_23 1.00 cop[tikv] group by:1, funcs:firstrow(1)->Column#18",
"│ └─TableFullScan_26 10000.00 cop[tikv] table:t keep order:false, stats:pseudo",
"└─TableReader_17(Probe) 10000.00 root data:TableFullScan_16",
" └─TableFullScan_16 10000.00 cop[tikv] table:t keep order:false, stats:pseudo"
Expand Down
17 changes: 8 additions & 9 deletions pkg/planner/core/casetest/testdata/integration_suite_out.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,15 +163,14 @@
{
"SQL": "explain format = 'verbose' select (2) in (select /*+ read_from_storage(tiflash[t1]) */ count(*) from t1) from (select t.b < (select /*+ read_from_storage(tiflash[t2]) */ t.b from t2 limit 1 ) from t3 t) t; -- we do generate the agg pushed-down plan of mpp, but cost-cmp failed",
"Plan": [
"HashJoin_17 3.00 32771.06 root CARTESIAN left outer semi join",
"├─Selection_23(Build) 0.80 31149.25 root eq(2, Column#18)",
"│ └─StreamAgg_30 1.00 31099.35 root funcs:count(1)->Column#18",
"│ └─TableReader_42 3.00 30949.65 root MppVersion: 2, data:ExchangeSender_41",
"│ └─ExchangeSender_41 3.00 464139.20 mpp[tiflash] ExchangeType: PassThrough",
"│ └─TableFullScan_40 3.00 464139.20 mpp[tiflash] table:t1 keep order:false",
"└─Projection_18(Probe) 3.00 53.67 root 1->Column#23",
" └─IndexReader_22 3.00 53.37 root index:IndexFullScan_21",
" └─IndexFullScan_21 3.00 610.50 cop[tikv] table:t, index:c(b) keep order:false"
"HashJoin_17 3.00 32770.77 root CARTESIAN left outer semi join",
"├─Selection_22(Build) 0.80 31149.25 root eq(2, Column#18)",
"│ └─StreamAgg_29 1.00 31099.35 root funcs:count(1)->Column#18",
"│ └─TableReader_41 3.00 30949.65 root MppVersion: 2, data:ExchangeSender_40",
"│ └─ExchangeSender_40 3.00 464139.20 mpp[tiflash] ExchangeType: PassThrough",
"│ └─TableFullScan_39 3.00 464139.20 mpp[tiflash] table:t1 keep order:false",
"└─IndexReader_21(Probe) 3.00 53.37 root index:IndexFullScan_20",
" └─IndexFullScan_20 3.00 610.50 cop[tikv] table:t, index:c(b) keep order:false"
]
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -426,8 +426,8 @@
"Plan": [
" TableReader root ",
" └─ExchangeSender cop[tiflash] ",
" └─Selection cop[tiflash] gt(test.t1.b, ?)",
" └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.a, ?), gt(test.t1.c, ?), keep order:false"
" └─Selection cop[tiflash] gt(test.t1.c, ?)",
" └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.a, ?), gt(test.t1.b, ?), keep order:false"
]
},
{
Expand Down
20 changes: 20 additions & 0 deletions pkg/planner/core/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2257,6 +2257,26 @@ func TestIssue41458(t *testing.T) {
}
}

func TestIssue54213(t *testing.T) {
store := testkit.CreateMockStore(t)
tk := testkit.NewTestKit(t, store)

tk.MustExec(`use test`)
tk.MustExec(`CREATE TABLE tb (
object_id bigint(20),
a bigint(20) ,
b bigint(20) ,
c bigint(20) ,
PRIMARY KEY (object_id),
KEY ab (a,b))`)
tk.MustQuery(`explain select count(1) from (select /*+ force_index(tb, ab) */ 1 from tb where a=1 and b=1 limit 100) a`).Check(
testkit.Rows("StreamAgg_11 1.00 root funcs:count(1)->Column#6",
"└─Limit_12 0.10 root offset:0, count:100",
" └─IndexReader_16 0.10 root index:Limit_15",
" └─Limit_15 0.10 cop[tikv] offset:0, count:100",
" └─IndexRangeScan_14 0.10 cop[tikv] table:tb, index:ab(a, b) range:[1 1,1 1], keep order:false, stats:pseudo"))
}

func TestIssue48257(t *testing.T) {
store, dom := testkit.CreateMockStoreAndDomain(t)
tk := testkit.NewTestKit(t, store)
Expand Down
2 changes: 1 addition & 1 deletion pkg/planner/core/logical_plan_trace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func TestSingleRuleTraceStep(t *testing.T) {
assertAction: "TableDual_4's columns[test.t.i_date,test.t.h,test.t.g,test.t.f,test.t.e_str,test.t.d_str,test.t.c_str,test.t.e,test.t.d,test.t.c,test.t.b,test.t.a] have been pruned",
},
{
assertAction: "Join_7's columns[Column#28,test.t.a] have been pruned",
assertAction: "Join_7's columns[Column#27] have been pruned",
},
},
},
Expand Down
8 changes: 4 additions & 4 deletions pkg/planner/core/rule_column_pruning.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ func (p *LogicalProjection) PruneColumns(parentUsedCols []*expression.Column, op
if err != nil {
return nil, err
}
// If its columns are all pruned, we directly use its child. The child will output at least one column.
if p.Schema().Len() == 0 {
return p.Children()[0], nil
}
return p, nil
}

Expand Down Expand Up @@ -637,10 +641,6 @@ func (p *LogicalWindow) extractUsedCols(parentUsedCols []*expression.Column) []*

// PruneColumns implements LogicalPlan interface.
func (p *LogicalLimit) PruneColumns(parentUsedCols []*expression.Column, opt *util.LogicalOptimizeOp) (LogicalPlan, error) {
if len(parentUsedCols) == 0 { // happens when LIMIT appears in UPDATE.
return p, nil
}

savedUsedCols := make([]*expression.Column, len(parentUsedCols))
copy(savedUsedCols, parentUsedCols)
var err error
Expand Down
17 changes: 17 additions & 0 deletions pkg/planner/core/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package core

import (
"fmt"
"math"
"slices"
"strings"

Expand Down Expand Up @@ -140,6 +141,22 @@ func (s *logicalSchemaProducer) setSchemaAndNames(schema *expression.Schema, nam
func (s *logicalSchemaProducer) inlineProjection(parentUsedCols []*expression.Column, opt *util.LogicalOptimizeOp) {
prunedColumns := make([]*expression.Column, 0)
used := expression.GetUsedList(s.SCtx().GetExprCtx().GetEvalCtx(), parentUsedCols, s.Schema())
if len(parentUsedCols) == 0 {
// When this operator output no columns, we return its smallest column for safety.
minColLen := math.MaxInt
chosenPos := 0
for i, col := range s.schema.Columns {
flen := col.GetType().GetFlen()
if flen < minColLen {
chosenPos = i
minColLen = flen
}
}
// It should be always true.
if len(used) > 0 {
used[chosenPos] = true
}
}
for i := len(used) - 1; i >= 0; i-- {
if !used[i] {
prunedColumns = append(prunedColumns, s.Schema().Columns[i])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -376,9 +376,8 @@ id estRows task access object operator info
HashJoin 10000.00 root CARTESIAN left outer semi join, other cond:eq(2, planner__core__casetest__integration.t.b)
├─TableReader(Build) 10000.00 root data:TableFullScan
│ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo
└─Projection(Probe) 10000.00 root 1->Column#22
└─TableReader 10000.00 root data:TableFullScan
└─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo
└─TableReader(Probe) 10000.00 root data:TableFullScan
└─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo
select (2) in (select b from t) from (select t.a < (select t.a from t t1 limit 1) from t) t;
(2) in (select b from t)
1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1879,31 +1879,31 @@ HashJoin 304261169.13 root CARTESIAN inner join
explain format = 'brief' select * from ((select /*+ leading(t5, t7) */ t8.a, t8.b from t8, t7, t6, t5 where t5.a = t6.a and t6.b=t7.b) t3 join t4 on t3.a=t4.a) join (t1 join t2 on t1.a=t2.a) on t1.a=t4.a;
id estRows task access object operator info
HashJoin 2431655263674.32 root CARTESIAN inner join
├─HashJoin(Build) 124625374.88 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t7.b, planner__core__casetest__rule__rule_join_reorder.t6.b) eq(planner__core__casetest__rule__rule_join_reorder.t5.a, planner__core__casetest__rule__rule_join_reorder.t6.a)]
│ ├─TableReader(Build) 9980.01 root data:Selection
│ │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t6.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t6.b))
│ │ └─TableFullScan 10000.00 cop[tikv] table:t6 keep order:false, stats:pseudo
│ └─HashJoin(Probe) 99800100.00 root CARTESIAN inner join
├─HashJoin(Build) 19511.72 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)]
│ ├─TableReader(Build) 9990.00 root data:Selection
│ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a))
│ │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo
│ └─HashJoin(Probe) 15609.38 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t1.a)]
│ ├─TableReader(Build) 9990.00 root data:Selection
│ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t7.b))
│ │ └─TableFullScan 10000.00 cop[tikv] table:t7 keep order:false, stats:pseudo
│ └─IndexReader(Probe) 9990.00 root index:IndexFullScan
│ └─IndexFullScan 9990.00 cop[tikv] table:t5, index:a(a) keep order:false, stats:pseudo
└─HashJoin(Probe) 19511.72 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)]
├─TableReader(Build) 9990.00 root data:Selection
│ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a))
│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo
└─HashJoin(Probe) 15609.38 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t1.a)]
│ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
│ │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo
│ └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t8.a, planner__core__casetest__rule__rule_join_reorder.t4.a)]
│ ├─TableReader(Build) 9990.00 root data:Selection
│ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.a))
│ │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo
│ └─TableReader(Probe) 9990.00 root data:Selection
│ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t8.a))
│ └─TableFullScan 10000.00 cop[tikv] table:t8 keep order:false, stats:pseudo
└─HashJoin(Probe) 124625374.88 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t7.b, planner__core__casetest__rule__rule_join_reorder.t6.b) eq(planner__core__casetest__rule__rule_join_reorder.t5.a, planner__core__casetest__rule__rule_join_reorder.t6.a)]
├─TableReader(Build) 9980.01 root data:Selection
│ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t6.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t6.b))
│ └─TableFullScan 10000.00 cop[tikv] table:t6 keep order:false, stats:pseudo
└─HashJoin(Probe) 99800100.00 root CARTESIAN inner join
├─TableReader(Build) 9990.00 root data:Selection
│ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a))
│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo
└─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t8.a, planner__core__casetest__rule__rule_join_reorder.t4.a)]
├─TableReader(Build) 9990.00 root data:Selection
│ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.a))
│ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo
└─TableReader(Probe) 9990.00 root data:Selection
└─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t8.a))
└─TableFullScan 10000.00 cop[tikv] table:t8 keep order:false, stats:pseudo
│ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t7.b))
│ └─TableFullScan 10000.00 cop[tikv] table:t7 keep order:false, stats:pseudo
└─IndexReader(Probe) 9990.00 root index:IndexFullScan
└─IndexFullScan 9990.00 cop[tikv] table:t5, index:a(a) keep order:false, stats:pseudo
explain format = 'brief' select * from ((select /*+ leading(t6, t8, t7) */ t8.a, t8.b from t8, t7, t6, t5 where t5.a = t6.a and t6.b=t7.b) t3 join t4 on t3.a=t4.a) join (t1 join t2 on t1.a=t2.a) on t1.a=t4.a;
id estRows task access object operator info
HashJoin 304261169.13 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -552,3 +552,93 @@ drop view if exists v0;
CREATE VIEW v0(c0) AS SELECT t0.c0 FROM t0;
SELECT t0.c0 FROM v0, t0 LEFT JOIN t1 ON t0.c0 WHERE ((INET_ATON('5V')) IS NULL);
c0
CREATE TABLE `t31cdd702` (
`col_48` date NOT NULL DEFAULT '2003-04-01',
`col_49` time NOT NULL,
`col_50` text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci;
INSERT INTO `t31cdd702` VALUES('1976-03-13','02:40:13',''),('2007-07-19','02:40:13',''),('2000-03-19','02:40:13',''),('1970-04-16','02:40:13',''),('2024-06-23','02:40:13',''),('2022-01-22','02:40:13',''),('2017-04-12','02:40:13',''),('1998-08-10','02:40:13',''),('2025-12-28','02:40:13',''),('2001-01-14','02:40:13',''),('1997-12-10','02:40:13',''),('2014-01-15','02:40:13',''),('1992-04-21','07:55:36','&v'),('2024-05-15','02:40:13',''),('1978-08-28','02:40:13',''),('2030-01-07','02:40:13',''),('1981-10-26','02:40:13',''),('1988-02-10','02:40:13',''),('2016-02-14','02:40:13',''),('1996-11-21','09:54:04','on6VRKYtaI'),('2022-08-03','02:40:13',''),('2034-10-05','02:40:13',''),('1988-11-12','02:18:22','m'),('2028-04-17','02:40:13',''),('1993-08-30','07:32:34','f@C*'),('2002-11-22','02:40:13',''),('2016-11-13','02:40:13',''),('2018-08-02','02:40:13',''),('1973-07-30','02:40:13',''),('2014-12-28','02:40:13',''),('1978-05-07','02:40:13',''),('1992-05-07','08:05:41','9'),('1979-05-23','04:08:58','brm'),('1996-08-01','23:10:58','IyG643!'),('2034-05-31','04:48:28',''),('1978-08-10','20:38:16','_$8reH*!MLE43'),('1986-08-13','23:20:51','eHr%WCBu');
CREATE TABLE `tl45f49bec` (
`col_21` time NOT NULL DEFAULT '19:03:14',
`col_22` text COLLATE gbk_bin NOT NULL,
`col_23` float NOT NULL,
PRIMARY KEY (`col_22`(2),`col_21`,`col_23`) /*T![clustered_index] CLUSTERED */,
UNIQUE KEY `idx_4` (`col_22`(1),`col_21`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin;
INSERT INTO `tl45f49bec` VALUES('05:26:53','',6436.3984),('05:33:06','',2418.3447),('05:56:03','!34',5327.29),('11:11:13','$uX7jK=*(prX#fm',8447.91),('05:35:17','*Jqx7z%a9~1Xw',7480.8096),('22:48:06','-',4563.9565),('03:48:30','1*t@',282.95325),('19:34:18','1~4i@f8X&exNs+CG0x',1238.2216),('13:22:26','3c9iE',1337.3021),('11:30:51','4xyKNd7+tKbh',130.22589),('22:35:40','56vCiz^%#hcS',8593.311),('07:56:40','5W0p%FB$cMOcC_-37k',7798.0645),('23:17:09','6A!03oVaCmLM',6335.1514),('04:29:52','7N',8081.281),('04:14:22','7rW*b',2108.5618),('02:11:20','87O8gvnLG5',5109.0845),('11:43:02','=0vROyDng',9798.294),('06:21:18','@+0~@GdUE%+hSJg*#',7182.4136),('03:08:56','B1y^-u_v+l',2024.7775),('11:36:31','E#o%-MWl',3556.0056),('17:40:46','E1!qy4Qvw6s',8514.763),('13:40:54','IwMfmh$lfz',2577.1978),('00:55:17','J&eq%cQP+cx',1946.7703),('23:26:11','JJ0',9597.079),('19:16:32','K0VO3g(_nx%HMX',3434.9307),('14:35:00','LEJ9!B',1137.5157),('01:26:40','Sfuqtm',5829.2686),('11:58:06','XpqXa^b*%b!&I4ZnS',5890.494),('21:06:51','^',6630.6665),('03:22:56','^a',9613.8545),('04:30:59','_bmnB!IeDpljq',6335.3916),('08:29:45','b)=RH&R',5911.286),('18:56:18','h+5l9',1037.6467),('22:44:14','sZuxMLWUU',5482.626),('03:51:42','x-7',9611.379);
SELECT 1 AS `r0` FROM (`t31cdd702`) JOIN `tl45f49bec` WHERE `tl45f49bec`.`col_22` BETWEEN 'LEJ9!B' AND 'TV#~!yw' LIMIT 24622829;
r0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Loading

0 comments on commit d0b9c09

Please sign in to comment.