|
using Antlr4.Runtime.Misc; |
|
using Parser; |
|
using System.Collections.Generic; |
|
|
|
namespace TSQLParser |
|
{ |
|
public class SqlInsertParserListener : TSqlInsertParserBaseListener |
|
{ |
|
private List<string> columnNames; |
|
private List<string> values; |
|
|
|
public IReadOnlyCollection<string> ColumnNames => columnNames; |
|
public IReadOnlyCollection<string> Values => values; |
|
|
|
|
|
public override void EnterInsert_statement([NotNull] TSqlInsertParser.Insert_statementContext context) |
|
{ |
|
base.EnterInsert_statement(context); |
|
|
|
columnNames = new List<string>(); |
|
values = new List<string>(); |
|
} |
|
|
|
public override void EnterInsert_column_name_list([NotNull] TSqlInsertParser.Insert_column_name_listContext context) |
|
{ |
|
base.EnterInsert_column_name_list(context); |
|
|
|
var columns = context.insert_column_id(); |
|
|
|
foreach (var column in columns) |
|
{ |
|
var columnName = column.GetText(); |
|
// The parser gurantees that the columnName should end in ], else it will throw an exception |
|
if(columnName.StartsWith("[")) |
|
{ |
|
columnName = columnName.Substring(1, columnName.Length - 2); |
|
} |
|
|
|
columnNames.Add(columnName); |
|
} |
|
} |
|
|
|
public override void EnterInsert_statement_value([NotNull] TSqlInsertParser.Insert_statement_valueContext context) |
|
{ |
|
base.EnterInsert_statement_value(context); |
|
|
|
var expList = context.expression_list(); |
|
|
|
var expressions = expList.expression(); |
|
|
|
foreach (var expression in expressions) |
|
{ |
|
var primitive_expression = expression.primitive_expression(); |
|
|
|
var _null = primitive_expression.NULL_(); |
|
var constant = primitive_expression.constant(); |
|
|
|
if (_null != null) |
|
{ |
|
values.Add(null); |
|
} |
|
else if (constant != null) |
|
{ |
|
if(constant.STRING() != null) |
|
{ |
|
var value = constant.STRING().GetText(); |
|
if (value.StartsWith("N")) |
|
{ |
|
value = value.Substring(1); |
|
} |
|
value = value.Substring(1, value.Length - 2); |
|
values.Add(value); |
|
} |
|
else if (constant.DECIMAL() != null || constant.REAL() != null || constant.FLOAT() != null) |
|
{ |
|
var value = constant.GetText(); |
|
values.Add(value); |
|
} |
|
} |
|
|
|
} |
|
} |
|
|
|
} |
|
|
|
} |