Skip to content

Commit dca29b2

Browse files
committed
Support "show tables;"
1 parent 386555c commit dca29b2

File tree

21 files changed

+1573
-1385
lines changed

21 files changed

+1573
-1385
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ flush
5858

5959
use database DATABASE_NAME
6060
drop database DATABASE_NAME
61+
62+
show tables;
6163
```
6264

6365
## Spec

src/MiniSQL.Api/Controllers/ApiController.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ private SelectResult HandleStatement(IStatement statement)
6363
case StatementType.SelectStatement:
6464
selectResult = HandleSelectStatement((SelectStatement)statement);
6565
break;
66+
case StatementType.ShowStatement:
67+
selectResult = HandleSelectStatement((ShowStatement)statement);
68+
break;
6669
case StatementType.ExecFileStatement:
6770
throw new Exception("Impossible reach");
6871
}
@@ -136,6 +139,25 @@ private void HandleStatement(DeleteStatement statement)
136139
_catalogManager.TryUpdateSchemaRecord(statement.TableName, newTableRootPage);
137140
}
138141

142+
private SelectResult HandleSelectStatement(ShowStatement statement)
143+
{
144+
List<SchemaRecord> tableSchemas = _catalogManager.GetTablesSchemaRecord();
145+
SelectResult result = new SelectResult();
146+
result.ColumnDeclarations = new List<AttributeDeclaration>() { new AttributeDeclaration() {AttributeName = "Table", Type = AttributeTypes.Char, CharLimit = 80}};
147+
result.Rows = new List<List<AtomValue>>();
148+
foreach (SchemaRecord tableSchema in tableSchemas)
149+
{
150+
List<AtomValue> row = new List<AtomValue>();
151+
AtomValue col = new AtomValue();
152+
col.Type = AttributeTypes.Char;
153+
col.CharLimit = 80;
154+
col.StringValue = tableSchema.Name;
155+
row.Add(col);
156+
result.Rows.Add(row);
157+
}
158+
return result;
159+
}
160+
139161
private SelectResult HandleSelectStatement(SelectStatement statement)
140162
{
141163
bool isIndexTreeAvailable = false;

src/MiniSQL.CatalogManager/Catalog.cs renamed to src/MiniSQL.CatalogManager/Controllers/Catalog.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using MiniSQL.Library.Interfaces;
55
using MiniSQL.Library.Models;
66

7-
namespace MiniSQL.CatalogManager
7+
namespace MiniSQL.CatalogManager.Controllers
88
{
99
//define all the functions
1010
public class Catalog : ICatalogManager
@@ -315,5 +315,11 @@ public void CheckValidation(IStatement statement)
315315
return;
316316
}
317317
}
318+
319+
public List<SchemaRecord> GetTablesSchemaRecord()
320+
{
321+
Catalog_table a = new Catalog_table(_databaseName);
322+
return a.GetTablesSchemaRecord();
323+
}
318324
}
319325
}

src/MiniSQL.CatalogManager/Controllers/Catalog_table.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,17 @@ public SchemaRecord GetTableSchemaRecord(string tableName)
6868
return s;
6969
}
7070

71-
71+
//return the schema record of the table named table name
72+
public List<SchemaRecord> GetTablesSchemaRecord()
73+
{
74+
List<SchemaRecord> list = new List<SchemaRecord>();
75+
for (int i = 0; i < tables.Count; i++)
76+
{
77+
SchemaRecord target_table = GetTableSchemaRecord(tables[i].table_name);
78+
list.Add(target_table);
79+
}
80+
return list;
81+
}
7282

7383
//to check if there is such a table named 'name'
7484
//if in,then return true. Vice versa

src/MiniSQL.CatalogManager/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using MiniSQL.Library.Interfaces;
66
using System.Diagnostics;
77
using System.IO;
8+
using MiniSQL.CatalogManager.Controllers;
89

910
namespace MiniSQL.CatalogManager
1011
{

src/MiniSQL.Interpreter/Grammar/MiniSQL.g4

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ simpleStatement:
5252

5353
| quitStatement
5454
| execFileStatement
55+
| showTablesStatement
5556
;
5657

5758
quitStatement:
@@ -62,6 +63,10 @@ execFileStatement:
6263
EXECFILE_SYMBOL (SINGLE_QUOTED_TEXT | DOUBLE_QUOTED_TEXT)
6364
;
6465

66+
showTablesStatement:
67+
SHOW_SYMBOL TABLES_SYMBOL
68+
;
69+
6570
createStatement:
6671
CREATE_SYMBOL (
6772
createTable
@@ -323,6 +328,7 @@ DECIMAL_NUMBER: DIGITS? DOT_SYMBOL DIGITS;
323328
FLOAT_NUMBER: (DIGITS? DOT_SYMBOL)? DIGITS [eE] (MINUS_OPERATOR | PLUS_OPERATOR)? DIGITS;
324329

325330

331+
SHOW_SYMBOL: S H O W; // Custom
326332
EXECFILE_SYMBOL: E X E C F I L E; // Custom
327333
QUIT_SYMBOL: Q U I T; // Custom
328334
AND_SYMBOL: A N D; // SQL-2003-R

src/MiniSQL.Interpreter/Grammar/MiniSQL/MiniSQL.interp

Lines changed: 4 additions & 1 deletion
Large diffs are not rendered by default.

src/MiniSQL.Interpreter/Grammar/MiniSQL/MiniSQL.tokens

Lines changed: 106 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -3,108 +3,109 @@ BIN_NUMBER=2
33
INT_NUMBER=3
44
DECIMAL_NUMBER=4
55
FLOAT_NUMBER=5
6-
EXECFILE_SYMBOL=6
7-
QUIT_SYMBOL=7
8-
AND_SYMBOL=8
9-
ASC_SYMBOL=9
10-
AS_SYMBOL=10
11-
BEGIN_SYMBOL=11
12-
BY_SYMBOL=12
13-
CHAR_SYMBOL=13
14-
CREATE_SYMBOL=14
15-
DELETE_SYMBOL=15
16-
DESC_SYMBOL=16
17-
DROP_SYMBOL=17
18-
FLOAT_SYMBOL=18
19-
FROM_SYMBOL=19
20-
INDEX_SYMBOL=20
21-
INSERT_SYMBOL=21
22-
INTO_SYMBOL=22
23-
INT_SYMBOL=23
24-
KEY_SYMBOL=24
25-
NOT_SYMBOL=25
26-
ON_SYMBOL=26
27-
ORDER_SYMBOL=27
28-
OR_SYMBOL=28
29-
PRIMARY_SYMBOL=29
30-
SELECT_SYMBOL=30
31-
TABLES_SYMBOL=31
32-
TABLE_SYMBOL=32
33-
UNIQUE_SYMBOL=33
34-
VALUES_SYMBOL=34
35-
VALUE_SYMBOL=35
36-
WHERE_SYMBOL=36
37-
WORK_SYMBOL=37
38-
XOR_SYMBOL=38
39-
EQUAL_OPERATOR=39
40-
ASSIGN_OPERATOR=40
41-
NULL_SAFE_EQUAL_OPERATOR=41
42-
GREATER_OR_EQUAL_OPERATOR=42
43-
GREATER_THAN_OPERATOR=43
44-
LESS_OR_EQUAL_OPERATOR=44
45-
LESS_THAN_OPERATOR=45
46-
NOT_EQUAL_OPERATOR=46
47-
PLUS_OPERATOR=47
48-
MINUS_OPERATOR=48
49-
MULT_OPERATOR=49
50-
DIV_OPERATOR=50
51-
MOD_OPERATOR=51
52-
LOGICAL_NOT_OPERATOR=52
53-
BITWISE_NOT_OPERATOR=53
54-
SHIFT_LEFT_OPERATOR=54
55-
SHIFT_RIGHT_OPERATOR=55
56-
LOGICAL_AND_OPERATOR=56
57-
BITWISE_AND_OPERATOR=57
58-
BITWISE_XOR_OPERATOR=58
59-
LOGICAL_OR_OPERATOR=59
60-
BITWISE_OR_OPERATOR=60
61-
DOT_SYMBOL=61
62-
COMMA_SYMBOL=62
63-
SEMICOLON_SYMBOL=63
64-
COLON_SYMBOL=64
65-
OPEN_PAR_SYMBOL=65
66-
CLOSE_PAR_SYMBOL=66
67-
OPEN_CURLY_SYMBOL=67
68-
CLOSE_CURLY_SYMBOL=68
69-
UNDERLINE_SYMBOL=69
70-
WHITESPACE=70
71-
IDENTIFIER=71
72-
NCHAR_TEXT=72
73-
DOUBLE_QUOTED_TEXT=73
74-
SINGLE_QUOTED_TEXT=74
75-
BLOCK_COMMENT=75
76-
POUND_COMMENT=76
77-
DASHDASH_COMMENT=77
78-
NOT_EQUAL2_OPERATOR=78
79-
'='=39
80-
':='=40
81-
'<=>'=41
82-
'>='=42
83-
'>'=43
84-
'<='=44
85-
'<'=45
86-
'!='=46
87-
'<>'=78
88-
'+'=47
89-
'-'=48
90-
'*'=49
91-
'/'=50
92-
'%'=51
93-
'!'=52
94-
'~'=53
95-
'<<'=54
96-
'>>'=55
97-
'&&'=56
98-
'&'=57
99-
'^'=58
100-
'||'=59
101-
'|'=60
102-
'.'=61
103-
','=62
104-
';'=63
105-
':'=64
106-
'('=65
107-
')'=66
108-
'{'=67
109-
'}'=68
110-
'_'=69
6+
SHOW_SYMBOL=6
7+
EXECFILE_SYMBOL=7
8+
QUIT_SYMBOL=8
9+
AND_SYMBOL=9
10+
ASC_SYMBOL=10
11+
AS_SYMBOL=11
12+
BEGIN_SYMBOL=12
13+
BY_SYMBOL=13
14+
CHAR_SYMBOL=14
15+
CREATE_SYMBOL=15
16+
DELETE_SYMBOL=16
17+
DESC_SYMBOL=17
18+
DROP_SYMBOL=18
19+
FLOAT_SYMBOL=19
20+
FROM_SYMBOL=20
21+
INDEX_SYMBOL=21
22+
INSERT_SYMBOL=22
23+
INTO_SYMBOL=23
24+
INT_SYMBOL=24
25+
KEY_SYMBOL=25
26+
NOT_SYMBOL=26
27+
ON_SYMBOL=27
28+
ORDER_SYMBOL=28
29+
OR_SYMBOL=29
30+
PRIMARY_SYMBOL=30
31+
SELECT_SYMBOL=31
32+
TABLES_SYMBOL=32
33+
TABLE_SYMBOL=33
34+
UNIQUE_SYMBOL=34
35+
VALUES_SYMBOL=35
36+
VALUE_SYMBOL=36
37+
WHERE_SYMBOL=37
38+
WORK_SYMBOL=38
39+
XOR_SYMBOL=39
40+
EQUAL_OPERATOR=40
41+
ASSIGN_OPERATOR=41
42+
NULL_SAFE_EQUAL_OPERATOR=42
43+
GREATER_OR_EQUAL_OPERATOR=43
44+
GREATER_THAN_OPERATOR=44
45+
LESS_OR_EQUAL_OPERATOR=45
46+
LESS_THAN_OPERATOR=46
47+
NOT_EQUAL_OPERATOR=47
48+
PLUS_OPERATOR=48
49+
MINUS_OPERATOR=49
50+
MULT_OPERATOR=50
51+
DIV_OPERATOR=51
52+
MOD_OPERATOR=52
53+
LOGICAL_NOT_OPERATOR=53
54+
BITWISE_NOT_OPERATOR=54
55+
SHIFT_LEFT_OPERATOR=55
56+
SHIFT_RIGHT_OPERATOR=56
57+
LOGICAL_AND_OPERATOR=57
58+
BITWISE_AND_OPERATOR=58
59+
BITWISE_XOR_OPERATOR=59
60+
LOGICAL_OR_OPERATOR=60
61+
BITWISE_OR_OPERATOR=61
62+
DOT_SYMBOL=62
63+
COMMA_SYMBOL=63
64+
SEMICOLON_SYMBOL=64
65+
COLON_SYMBOL=65
66+
OPEN_PAR_SYMBOL=66
67+
CLOSE_PAR_SYMBOL=67
68+
OPEN_CURLY_SYMBOL=68
69+
CLOSE_CURLY_SYMBOL=69
70+
UNDERLINE_SYMBOL=70
71+
WHITESPACE=71
72+
IDENTIFIER=72
73+
NCHAR_TEXT=73
74+
DOUBLE_QUOTED_TEXT=74
75+
SINGLE_QUOTED_TEXT=75
76+
BLOCK_COMMENT=76
77+
POUND_COMMENT=77
78+
DASHDASH_COMMENT=78
79+
NOT_EQUAL2_OPERATOR=79
80+
'='=40
81+
':='=41
82+
'<=>'=42
83+
'>='=43
84+
'>'=44
85+
'<='=45
86+
'<'=46
87+
'!='=47
88+
'<>'=79
89+
'+'=48
90+
'-'=49
91+
'*'=50
92+
'/'=51
93+
'%'=52
94+
'!'=53
95+
'~'=54
96+
'<<'=55
97+
'>>'=56
98+
'&&'=57
99+
'&'=58
100+
'^'=59
101+
'||'=60
102+
'|'=61
103+
'.'=62
104+
','=63
105+
';'=64
106+
':'=65
107+
'('=66
108+
')'=67
109+
'{'=68
110+
'}'=69
111+
'_'=70

src/MiniSQL.Interpreter/Grammar/MiniSQL/MiniSQLBaseListener.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ public virtual void EnterExecFileStatement([NotNull] MiniSQLParser.ExecFileState
8383
/// <param name="context">The parse tree.</param>
8484
public virtual void ExitExecFileStatement([NotNull] MiniSQLParser.ExecFileStatementContext context) { }
8585
/// <summary>
86+
/// Enter a parse tree produced by <see cref="MiniSQLParser.showTablesStatement"/>.
87+
/// <para>The default implementation does nothing.</para>
88+
/// </summary>
89+
/// <param name="context">The parse tree.</param>
90+
public virtual void EnterShowTablesStatement([NotNull] MiniSQLParser.ShowTablesStatementContext context) { }
91+
/// <summary>
92+
/// Exit a parse tree produced by <see cref="MiniSQLParser.showTablesStatement"/>.
93+
/// <para>The default implementation does nothing.</para>
94+
/// </summary>
95+
/// <param name="context">The parse tree.</param>
96+
public virtual void ExitShowTablesStatement([NotNull] MiniSQLParser.ShowTablesStatementContext context) { }
97+
/// <summary>
8698
/// Enter a parse tree produced by <see cref="MiniSQLParser.createStatement"/>.
8799
/// <para>The default implementation does nothing.</para>
88100
/// </summary>

src/MiniSQL.Interpreter/Grammar/MiniSQL/MiniSQLBaseVisitor.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ public partial class MiniSQLBaseVisitor<Result> : AbstractParseTreeVisitor<Resul
7474
/// <return>The visitor result.</return>
7575
public virtual Result VisitExecFileStatement([NotNull] MiniSQLParser.ExecFileStatementContext context) { return VisitChildren(context); }
7676
/// <summary>
77+
/// Visit a parse tree produced by <see cref="MiniSQLParser.showTablesStatement"/>.
78+
/// <para>
79+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
80+
/// on <paramref name="context"/>.
81+
/// </para>
82+
/// </summary>
83+
/// <param name="context">The parse tree.</param>
84+
/// <return>The visitor result.</return>
85+
public virtual Result VisitShowTablesStatement([NotNull] MiniSQLParser.ShowTablesStatementContext context) { return VisitChildren(context); }
86+
/// <summary>
7787
/// Visit a parse tree produced by <see cref="MiniSQLParser.createStatement"/>.
7888
/// <para>
7989
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>

0 commit comments

Comments
 (0)