@@ -524,6 +524,7 @@ func (b *PlanBuilder) buildDropBindPlan(v *ast.DropBindingStmt) (Plan, error) {
524
524
SQLBindOp : OpSQLBindDrop ,
525
525
NormdOrigSQL : parser .Normalize (v .OriginSel .Text ()),
526
526
IsGlobal : v .GlobalScope ,
527
+ Db : getDefaultDB (b .ctx , v .OriginSel ),
527
528
}
528
529
if v .HintedSel != nil {
529
530
p .BindSQL = v .HintedSel .Text ()
@@ -540,13 +541,42 @@ func (b *PlanBuilder) buildCreateBindPlan(v *ast.CreateBindingStmt) (Plan, error
540
541
BindSQL : v .HintedSel .Text (),
541
542
IsGlobal : v .GlobalScope ,
542
543
BindStmt : v .HintedSel ,
544
+ Db : getDefaultDB (b .ctx , v .OriginSel ),
543
545
Charset : charSet ,
544
546
Collation : collation ,
545
547
}
546
548
b .visitInfo = appendVisitInfo (b .visitInfo , mysql .SuperPriv , "" , "" , "" , nil )
547
549
return p , nil
548
550
}
549
551
552
+ func getDefaultDB (ctx sessionctx.Context , sel ast.StmtNode ) string {
553
+ implicitDB := & implicitDatabase {}
554
+ sel .Accept (implicitDB )
555
+ if implicitDB .hasImplicit {
556
+ return ctx .GetSessionVars ().CurrentDB
557
+ }
558
+ return ""
559
+ }
560
+
561
+ type implicitDatabase struct {
562
+ hasImplicit bool
563
+ }
564
+
565
+ func (i * implicitDatabase ) Enter (in ast.Node ) (out ast.Node , skipChildren bool ) {
566
+ switch x := in .(type ) {
567
+ case * ast.TableName :
568
+ if x .Schema .L == "" {
569
+ i .hasImplicit = true
570
+ }
571
+ return in , true
572
+ }
573
+ return in , false
574
+ }
575
+
576
+ func (i * implicitDatabase ) Leave (in ast.Node ) (out ast.Node , ok bool ) {
577
+ return in , true
578
+ }
579
+
550
580
// detectSelectAgg detects an aggregate function or GROUP BY clause.
551
581
func (b * PlanBuilder ) detectSelectAgg (sel * ast.SelectStmt ) bool {
552
582
if sel .GroupBy != nil {
0 commit comments