Пример #1
0
        private Table CreateTable(string name, SqlObjectIdentifier identifier, MemoryDbDataReader.ResultBatch batch,
                                  SqlIdentifierCollection columnList)
        {
            if (columnList != null)
            {
                if (columnList.Count > batch.Fields.Count)
                {
                    throw new SqlInsertTooManyColumnsException( );
                }

                if (columnList.Count < batch.Fields.Count)
                {
                    throw new SqlInsertTooManyValuesException( );
                }
            }
            var table = (identifier != null) ? new Table(identifier) : new Table(name);

            for (int fieldIndex = 0; fieldIndex < batch.Fields.Count; fieldIndex++)
            {
                var field   = batch.Fields[fieldIndex];
                var sqlType = Helper.DbType2SqlType(field.DbType);

                var columnName = columnList != null ? columnList[fieldIndex].Value : field.Name;
                var select     = (field as MemoryDbDataReader.ReaderFieldData)?.SelectFieldData;
                var tc         = (select as SelectDataFromColumn)?.TableColumn;
                var column     = tc != null
                    ? new Column(tc.Column, columnName, table.Columns.Count)
                    : new Column(table, columnName, sqlType, Database.UserDataTypes, table.Columns.Count);
                table.Columns.Add(column);
            }

            return(table);
        }
        public Table ToDatabase(SqlObjectIdentifier identifier, MemoryDbConnection connection, MemoryDbDataReader.ResultBatch batch)
        {
            var table = new Table(identifier);

            foreach (var field in batch.Fields)
            {
                Column column;
                if ((field as MemoryDbDataReader.ReaderFieldData)?.SelectFieldData is SelectDataFromColumn select)
                {
                    column = new Column(select.TableColumn.Column, field.Name, table.Columns.Count)
                    {
                        ParentTable        = table,
                        ComputedExpression = null
                    };
                }
                else
                {
                    var sqlType = Helper.DbType2SqlType(field.DbType);
                    column = new Column(table, field.Name, sqlType, connection.GetMemoryDatabase(  ).UserDataTypes, table.Columns.Count);
                }
                table.Columns.Add(column);
            }

            if (Helper.IsLocalTempTable(identifier))
            {
                connection.TempTables.Add(table.FullName, table);
            }
            else
            {
                connection.MemoryDatabase.Tables.Add(table.FullName, table);
            }
            return(table);
        }
Пример #3
0
        public static Table GetTableFromObjectId(SqlObjectIdentifier identifier, Dictionary <string, Table> tables, Dictionary <string, Table> tempTables, bool throwException = true)
        {
            var tableName = Helper.GetQualifiedName(identifier);

            if (tempTables.ContainsKey(tableName))
            {
                return(tempTables[tableName]);
            }

            if (tables.ContainsKey(tableName))
            {
                return(tables[tableName]);
            }

            var foundTables = tables.Where(t => t.Value.Name == identifier.ObjectName.Value).ToList( );

            if (foundTables.Count( ) != 1)
            {
                if (foundTables.Count == 0 && throwException == false)
                {
                    return(null);
                }
                throw new SqlInvalidTableNameException(tableName);
            }

            return(foundTables.First( ).Value);
        }
Пример #4
0
        public static TableColumn GetTableColumn(SqlObjectIdentifier objectIdentifier, RawData rawData)
        {
            Table table;
            var   tableAlias = objectIdentifier.SchemaName.Value;
            var   aliasList  = rawData.TableAliasList;

            if (aliasList.Count == 0)
            {
                foreach (var row in rawData.RawRowList.First())
                {
                    aliasList.Add(row.Table.FullName, row.Table);
                }
            }
            if (objectIdentifier.SchemaName.Value == null)
            {
                var tables = aliasList
                             .Where(t => t.Value.Columns.Any(c => c.Name == objectIdentifier.ObjectName.Value))
                             .ToList(  );
                if (tables.Count == 0)
                {
                    throw new SqlInvalidColumnNameException(objectIdentifier.ObjectName.Value);
                }
                if (tables.Count > 1)
                {
                    throw new SqlUnqualifiedColumnNameException(objectIdentifier.ObjectName.Value);
                }

                var tableEntry = tables.Single( );
                table      = tableEntry.Value;
                tableAlias = tableEntry.Key;
            }
            else
            {
                if (aliasList.ContainsKey(tableAlias))
                {
                    table = aliasList[tableAlias];
                }
                else
                {
                    var tableEntry = aliasList
                                     .Where(a => a.Key == a.Value.FullName)
                                     .Single(t => t.Value.FullName == tableAlias || t.Value.Name == tableAlias);
                    table      = tableEntry.Value;
                    tableAlias = tableEntry.Key;
                }
            }

            var column = table.Columns.Single(c => c.Name == objectIdentifier.ObjectName.Value);

            return(new TableColumn {
                TableName = tableAlias, Column = column
            });
        }
Пример #5
0
        private void AddFieldFromColumn(SqlObjectIdentifier objectIdentifier, string name, MemoryDbDataReader.ResultBatch batch, RawData rawData)
        {
            var tableColumn = Helper.GetTableColumn(objectIdentifier, rawData);
            var readerField = new MemoryDbDataReader.ReaderFieldData
            {
                Name            = name,
                DbType          = tableColumn.Column.DbDataType.ToString(),
                NetType         = tableColumn.Column.NetDataType,
                FieldIndex      = batch.Fields.Count,
                SelectFieldData = new SelectDataFromColumn(tableColumn, rawData)
            };

            batch.Fields.Add(readerField);
        }
Пример #6
0
 public Table(SqlObjectIdentifier name)
 {
     Name                  = name.ObjectName.Value;
     SchemaName            = name.SchemaName?.Value ?? Helper.DefaultSchemaName;
     FullName              = Helper.GetQualifiedName(name);
     Columns               = new List <Column>();
     PrimaryKeys           = new List <Column>();
     PrimaryKeyConstraints = new Dictionary <string, List <Column> >();
     ForeignKeyConstraints = new List <ForeignKeyConstraint>();
     Rows                  = new List <ArrayList>();
     Options               = new Dictionary <OptionEnum, string>
     {
         [OptionEnum.IdentityInsert] = "off"
     };
 }
Пример #7
0
 public override void Visit(SqlObjectIdentifier codeObject)
 {
     _stringBuilder.Append(codeObject.Sql);
 }
 public override void Visit(SqlObjectIdentifier codeObject)
 {
     Format(codeObject);
 }
Пример #9
0
 public static bool IsGlobalTempTable(SqlObjectIdentifier intoTarget)
 {
     return(IsGlobalTempTable(intoTarget.ObjectName.Value));
 }
Пример #10
0
 public static string GetQualifiedName(SqlObjectIdentifier identifier)
 {
     return((identifier.SchemaName.Value ?? DefaultSchemaName) + "." + identifier.ObjectName);
 }