/// <summary> /// Recupera uma consulta para a tradução do comando passsado. /// </summary> /// <param name="command">Comando que sera traduzido.</param> /// <returns></returns> public static SelectStatement P(ISelectStatementReferences references, string command) { if (references == null) { throw new ArgumentNullException("references"); } Lexer lex = new Lexer(command); Parser parser = new Parser(lex); parser.Execute(); return(new SelectStatement(references, parser)); }
/// <summary> /// Recupera as informações contidas dentro da clausula HAVING. /// </summary> /// <param name="references"></param> /// <param name="havingPart"></param> internal SelectStatement(ISelectStatementReferences references, HavingPart havingPart) { if (references == null) { throw new ArgumentNullException("references"); } _references = references; foreach (SqlExpression se in havingPart.Expressions) { ColumnName(se); } _columnsInfoList = new List <ColumnInfo>(_columnsInfo.Values); }
/// <summary> /// Recupera as informações contidas dentro da clausula GROUP BY. /// </summary> /// <param name="gbp"></param> internal SelectStatement(ISelectStatementReferences references, GroupByPart gbp) { if (references == null) { throw new ArgumentNullException("references"); } _references = references; foreach (SqlExpression sqle in gbp.Expressions) { ColumnName(sqle); } _columnsInfoList = new List <ColumnInfo>(_columnsInfo.Values); }
/// <summary> /// Recupera as informações contidas dentro da clausula ORDER BY. /// </summary> /// <param name="references"></param> /// <param name="op"></param> internal SelectStatement(ISelectStatementReferences references, OrderByPart op) { if (references == null) { throw new ArgumentNullException("references"); } _references = references; foreach (OrderByExpression oe in op.OrderByExpressions) { ColumnName(oe.Expression); } _columnsInfoList = new List <ColumnInfo>(_columnsInfo.Values); }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="tableName">Referência da expressão que armazena o nome da tabela.</param> /// <param name="tableAlias">Expressão que armazena o apelido da tabela.</param> internal TableInfo(ISelectStatementReferences references, InterpreterExpression.Nodes.TableNameExpression tableName, Expression tableAlias) { if (references == null) { throw new ArgumentNullException("references"); } _references = references; _tableNameExpression = tableName; _tableName = new TableName { Name = tableName.Name, Schema = tableName.Schema }; _tableAlias = tableAlias; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="references"></param> /// <param name="parser"></param> internal SelectStatement(ISelectStatementReferences references, Parser parser) { if (references == null) { throw new ArgumentNullException("references"); } _references = references; _parser = parser; foreach (Select select in parser.SelectParts) { GetSelectInfo(select); } foreach (KeyValuePair <string, ColumnInfo> ci in _columnsInfo) { if (ci.Value.TableNameOrTableAlias == null) { bool found = false; foreach (KeyValuePair <string, TableInfo> ti in _tablesInfo) { if (ti.Value.ExistsColumn(ci.Value)) { if (!found) { ti.Value.AddColumn(ci.Value); found = true; } else { _firstTable.AddColumn(ci.Value); } } } } else { foreach (KeyValuePair <string, TableInfo> ti in _tablesInfo) { if (ci.Value.TableNameOrTableAlias == ti.Value.TableName.Name || ci.Value.TableNameOrTableAlias == ti.Value.TableAlias) { ti.Value.AddColumn(ci.Value); break; } } } } _tablesInfoList = new List <TableInfo>(_tablesInfo.Values); _columnsInfoList = new List <ColumnInfo>(_columnsInfo.Values); }