Skip to content

Commit 2b2b4b2

Browse files
authored
Implement ANALYZE statement (#191)
* Implement ANALYZE statement * Update testdata
1 parent e11cd83 commit 2b2b4b2

File tree

7 files changed

+52
-1
lines changed

7 files changed

+52
-1
lines changed

ast/ast.go

+12
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ func (CreateSequence) isStatement() {}
9090
func (AlterSequence) isStatement() {}
9191
func (DropSequence) isStatement() {}
9292
func (AlterStatistics) isStatement() {}
93+
func (Analyze) isStatement() {}
9394
func (CreateVectorIndex) isStatement() {}
9495
func (DropVectorIndex) isStatement() {}
9596
func (Insert) isStatement() {}
@@ -332,6 +333,7 @@ func (CreateSequence) isDDL() {}
332333
func (AlterSequence) isDDL() {}
333334
func (DropSequence) isDDL() {}
334335
func (AlterStatistics) isDDL() {}
336+
func (Analyze) isDDL() {}
335337
func (CreateVectorIndex) isDDL() {}
336338
func (DropVectorIndex) isDDL() {}
337339

@@ -2866,6 +2868,16 @@ type AlterStatistics struct {
28662868
Options *Options
28672869
}
28682870

2871+
// Analyze is ANALYZE statement node.
2872+
//
2873+
// ANALYZE
2874+
type Analyze struct {
2875+
// pos = Analyze
2876+
// end = Analyze + 7
2877+
2878+
Analyze token.Pos // position of "ANALYZE" keyword
2879+
}
2880+
28692881
// ================================================================================
28702882
//
28712883
// Types for Schema

ast/pos.go

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ast/sql.go

+1
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,7 @@ func (r *RolePrivilege) SQL() string {
12701270
func (s *AlterStatistics) SQL() string {
12711271
return "ALTER STATISTICS " + s.Name.SQL() + " SET " + s.Options.SQL()
12721272
}
1273+
func (a *Analyze) SQL() string { return "ANALYZE" }
12731274

12741275
// ================================================================================
12751276
//

parser.go

+12-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,8 @@ func (p *Parser) parseStatement() ast.Statement {
213213
case p.Token.Kind == "SELECT" || p.Token.Kind == "@" || p.Token.Kind == "WITH" || p.Token.Kind == "(":
214214
return p.parseQueryStatement()
215215
case p.Token.Kind == "CREATE" || p.Token.IsKeywordLike("ALTER") || p.Token.IsKeywordLike("DROP") ||
216-
p.Token.IsKeywordLike("RENAME") || p.Token.IsKeywordLike("GRANT") || p.Token.IsKeywordLike("REVOKE"):
216+
p.Token.IsKeywordLike("RENAME") || p.Token.IsKeywordLike("GRANT") || p.Token.IsKeywordLike("REVOKE") ||
217+
p.Token.IsKeywordLike("ANALYZE"):
217218
return p.parseDDL()
218219
case p.Token.IsKeywordLike("INSERT") || p.Token.IsKeywordLike("DELETE") || p.Token.IsKeywordLike("UPDATE"):
219220
return p.parseDML()
@@ -2378,6 +2379,8 @@ func (p *Parser) parseDDL() ast.DDL {
23782379
case p.Token.IsKeywordLike("REVOKE"):
23792380
p.nextToken()
23802381
return p.parseRevoke(pos)
2382+
case p.Token.IsKeywordLike("ANALYZE"):
2383+
return p.parseAnalyze()
23812384
}
23822385

23832386
if p.Token.Kind != token.TokenIdent {
@@ -3736,6 +3739,14 @@ func (p *Parser) parseAlterStatistics(pos token.Pos) *ast.AlterStatistics {
37363739
}
37373740
}
37383741

3742+
func (p *Parser) parseAnalyze() *ast.Analyze {
3743+
pos := p.expectKeywordLike("ANALYZE").Pos
3744+
3745+
return &ast.Analyze{
3746+
Analyze: pos,
3747+
}
3748+
}
3749+
37393750
var scalarSchemaTypes = []string{
37403751
"BOOL",
37413752
"INT64",

testdata/input/ddl/analyze.sql

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ANALYZE

testdata/result/ddl/analyze.sql.txt

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
--- analyze.sql
2+
ANALYZE
3+
--- AST
4+
&ast.Analyze{
5+
Analyze: 0,
6+
}
7+
8+
--- SQL
9+
ANALYZE
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
--- analyze.sql
2+
ANALYZE
3+
--- AST
4+
&ast.Analyze{
5+
Analyze: 0,
6+
}
7+
8+
--- SQL
9+
ANALYZE

0 commit comments

Comments
 (0)