Skip to content

Commit

Permalink
[parser] parser: add RestoreCtx and change the Node interface (#78)
Browse files Browse the repository at this point in the history
  • Loading branch information
leoppro authored and ti-chi-bot committed Oct 9, 2021
1 parent 1dc030a commit 3d78419
Show file tree
Hide file tree
Showing 13 changed files with 459 additions and 275 deletions.
3 changes: 1 addition & 2 deletions parser/ast/ast.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ package ast

import (
"io"
"strings"

"github.com/pingcap/parser/model"
"github.com/pingcap/parser/types"
Expand All @@ -27,7 +26,7 @@ import (
// Interfaces embed Node should have 'Node' name suffix.
type Node interface {
// Restore returns the sql text from ast tree
Restore(sb *strings.Builder) error
Restore(ctx *RestoreCtx) error
// Accept accepts Visitor to visit itself.
// The returned node should replace original node.
// ok returns false to stop visiting.
Expand Down
116 changes: 58 additions & 58 deletions parser/ast/ddl.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
package ast

import (
"strings"

"github.com/pingcap/errors"
"github.com/pingcap/parser/auth"
"github.com/pingcap/parser/model"
Expand Down Expand Up @@ -65,15 +63,17 @@ type DatabaseOption struct {
Value string
}

// Restore implements Recoverable interface.
func (n *DatabaseOption) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *DatabaseOption) Restore(ctx *RestoreCtx) error {
switch n.Tp {
case DatabaseOptionCharset:
sb.WriteString("CHARACTER SET = ")
sb.WriteString(n.Value)
ctx.WriteKeyWord("CHARACTER SET")
ctx.WritePlain(" = ")
ctx.WritePlain(n.Value)
case DatabaseOptionCollate:
sb.WriteString("COLLATE = ")
sb.WriteString(n.Value)
ctx.WriteKeyWord("COLLATE")
ctx.WritePlain(" = ")
ctx.WritePlain(n.Value)
default:
return errors.Errorf("invalid DatabaseOptionType: %d", n.Tp)
}
Expand All @@ -90,16 +90,16 @@ type CreateDatabaseStmt struct {
Options []*DatabaseOption
}

// Restore implements Recoverable interface.
func (n *CreateDatabaseStmt) Restore(sb *strings.Builder) error {
sb.WriteString("CREATE DATABASE ")
// Restore implements Node interface.
func (n *CreateDatabaseStmt) Restore(ctx *RestoreCtx) error {
ctx.WriteKeyWord("CREATE DATABASE ")
if n.IfNotExists {
sb.WriteString("IF NOT EXISTS ")
ctx.WriteKeyWord("IF NOT EXISTS ")
}
WriteName(sb, n.Name)
ctx.WriteName(n.Name)
for _, option := range n.Options {
sb.WriteString(" ")
err := option.Restore(sb)
ctx.WritePlain(" ")
err := option.Restore(ctx)
if err != nil {
return errors.Trace(err)
}
Expand All @@ -126,13 +126,13 @@ type DropDatabaseStmt struct {
Name string
}

// Restore implements Recoverable interface.
func (n *DropDatabaseStmt) Restore(sb *strings.Builder) error {
sb.WriteString("DROP DATABASE ")
// Restore implements Node interface.
func (n *DropDatabaseStmt) Restore(ctx *RestoreCtx) error {
ctx.WriteKeyWord("DROP DATABASE ")
if n.IfExists {
sb.WriteString("IF EXISTS ")
ctx.WriteKeyWord("IF EXISTS ")
}
WriteName(sb, n.Name)
ctx.WriteName(n.Name)
return nil
}

Expand All @@ -154,8 +154,8 @@ type IndexColName struct {
Length int
}

// Restore implements Recoverable interface.
func (n *IndexColName) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *IndexColName) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -185,8 +185,8 @@ type ReferenceDef struct {
OnUpdate *OnUpdateOpt
}

// Restore implements Recoverable interface.
func (n *ReferenceDef) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *ReferenceDef) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -255,8 +255,8 @@ type OnDeleteOpt struct {
ReferOpt ReferOptionType
}

// Restore implements Recoverable interface.
func (n *OnDeleteOpt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *OnDeleteOpt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand All @@ -276,8 +276,8 @@ type OnUpdateOpt struct {
ReferOpt ReferOptionType
}

// Restore implements Recoverable interface.
func (n *OnUpdateOpt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *OnUpdateOpt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -325,8 +325,8 @@ type ColumnOption struct {
Refer *ReferenceDef
}

// Restore implements Recoverable interface.
func (n *ColumnOption) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *ColumnOption) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -361,8 +361,8 @@ type IndexOption struct {
Comment string
}

// Restore implements Recoverable interface.
func (n *IndexOption) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *IndexOption) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -406,8 +406,8 @@ type Constraint struct {
Option *IndexOption // Index Options
}

// Restore implements Recoverable interface.
func (n *Constraint) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *Constraint) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -451,8 +451,8 @@ type ColumnDef struct {
Options []*ColumnOption
}

// Restore implements Recoverable interface.
func (n *ColumnDef) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *ColumnDef) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -494,8 +494,8 @@ type CreateTableStmt struct {
Select ResultSetNode
}

// Restore implements Recoverable interface.
func (n *CreateTableStmt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *CreateTableStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -553,8 +553,8 @@ type DropTableStmt struct {
IsView bool
}

// Restore implements Recoverable interface.
func (n *DropTableStmt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *DropTableStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -588,8 +588,8 @@ type RenameTableStmt struct {
TableToTables []*TableToTable
}

// Restore implements Recoverable interface.
func (n *RenameTableStmt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *RenameTableStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -629,8 +629,8 @@ type TableToTable struct {
NewTable *TableName
}

// Restore implements Recoverable interface.
func (n *TableToTable) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *TableToTable) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -669,8 +669,8 @@ type CreateViewStmt struct {
CheckOption model.ViewCheckOption
}

// Restore implements Recoverable interface.
func (n *CreateViewStmt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *CreateViewStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -706,8 +706,8 @@ type CreateIndexStmt struct {
IndexOption *IndexOption
}

// Restore implements Recoverable interface.
func (n *CreateIndexStmt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *CreateIndexStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -750,8 +750,8 @@ type DropIndexStmt struct {
Table *TableName
}

// Restore implements Recoverable interface.
func (n *DropIndexStmt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *DropIndexStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -843,8 +843,8 @@ type ColumnPosition struct {
RelativeColumn *ColumnName
}

// Restore implements Recoverable interface.
func (n *ColumnPosition) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *ColumnPosition) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -925,8 +925,8 @@ type AlterTableSpec struct {
Num uint64
}

// Restore implements Recoverable interface.
func (n *AlterTableSpec) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *AlterTableSpec) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -984,8 +984,8 @@ type AlterTableStmt struct {
Specs []*AlterTableSpec
}

// Restore implements Recoverable interface.
func (n *AlterTableStmt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *AlterTableStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down Expand Up @@ -1019,8 +1019,8 @@ type TruncateTableStmt struct {
Table *TableName
}

// Restore implements Recoverable interface.
func (n *TruncateTableStmt) Restore(sb *strings.Builder) error {
// Restore implements Node interface.
func (n *TruncateTableStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
}

Expand Down
Loading

0 comments on commit 3d78419

Please sign in to comment.