Пример #1
0
        public IColumn CreateInstance(ColumnTypeName columnType, string colName, bool isNullable, string def, Dictionary <string, object> details)
        {
            int    length     = 0;
            int    prec       = 0;
            int    scale      = 0;
            string collation  = "";
            bool   isIdentity = false;

            if (details.ContainsKey("Length"))
            {
                length = Convert.ToInt32(details["Length"]);
            }
            if (details.ContainsKey("Prec"))
            {
                prec = Convert.ToInt32(details["Prec"]);
            }
            if (details.ContainsKey("Scale"))
            {
                scale = Convert.ToInt32(details["Scale"]);
            }
            if (details.ContainsKey("Collation"))
            {
                collation = details["Collation"].ToString();
            }
            if (details.ContainsKey("Identity"))
            {
                isIdentity = Convert.ToBoolean(details["Identity"]);
            }

            return(CreateInstance(columnType, colName, length, prec, scale, isNullable, isIdentity, def, collation));
        }
Пример #2
0
 protected OracleColumn(string name, ColumnTypeName type, bool isNullable, string def)
 {
     Name       = name;
     Type       = type;
     IsNullable = isNullable;
     _default   = def;
     Details    = new Dictionary <string, object>();
 }
Пример #3
0
 public OracleRawColumn(string name, ColumnTypeName type, int length, bool isNullable, string def)
     : base(name, type, isNullable, def)
 {
     Details["Length"] = length;
     if (IsGuid)
     {
         base.Default = ConvertNativeFunctionToKeyword(def);
     }
 }
Пример #4
0
        protected void CreateTable(ColumnTypeName type, int length, int prec, int scale, bool isNullable, string def, string collation)
        {
            IAXmlReader      xmlReader       = new AXmlReader(DbContext);
            ITableDefinition tableDefinition = xmlReader.ReadSchema(
                DbContext.ColumnTypeConverterForRead,
                XmlFileHelper.CreateSchemaXmlOneColumn(TableName, type.ConvertToString(), length, prec, scale, isNullable, def, collation));

            DbSchema.CreateTable(tableDefinition);
        }
Пример #5
0
 protected SqlServerColumn(string name, ColumnTypeName type, bool isNullable, bool isIdentity, string def)
 {
     Name       = name;
     Type       = type;
     IsNullable = isNullable;
     IsIdentity = isIdentity;
     _default   = def;
     _details   = new Dictionary <string, object>();
 }
Пример #6
0
        protected void TestColumn(ColumnTypeName type, int length, int prec, int scale, bool isNullable, string def, string collation)
        {
            List <IColumn> columns = new List <IColumn> {
                ColumnFactory.CreateInstance(type, "col1", length, prec, scale, isNullable, false, def, collation)
            };
            ITableDefinition expectedTableDefinition = PowerPlant.CreateTableDefinition(TableName, columns, "");

            DbSchema.CreateTable(expectedTableDefinition);
            var columnTypeConverter = DbContext.PowerPlant.CreateColumnTypeConverter(ConversionFileForWrite);
            ITableDefinition retrievedTableDefinition = DbSchema.GetTableDefinition(columnTypeConverter, TableName);

            AssertTableDefinition(expectedTableDefinition, retrievedTableDefinition);
        }
Пример #7
0
 public OracleNumberColumn(string name, ColumnTypeName columnTypeName, int prec, int scale, bool isNullable, string def)
     : base(name, columnTypeName, isNullable, def)
 {
     Details["Prec"]  = prec;
     Details["Scale"] = scale;
     if (prec == 0 && scale == 0)
     {
         _typeToString = "number";
     }
     else if (prec == 0 && scale != 0)
     {
         _typeToString = $"number(*,{scale})";
     }
     else if (prec != 0 && scale == 0)
     {
         _typeToString = $"number({prec})";
     }
     else
     {
         _typeToString = $"number({prec},{scale})";
     }
 }
Пример #8
0
        public IColumn CreateInstance(ColumnTypeName type, string name, int length, int prec, int scale, bool isNullable, bool isIdentity, string def, string collation)
        {
            switch (type)
            {
            case ColumnTypeName.BinaryDouble:
                return(new SqlServerFloatColumn(name, 53, isNullable, def));

            case ColumnTypeName.BinaryFloat:
                return(new SqlServerRealColumn(name, isNullable, def));

            case ColumnTypeName.Blob:
                return(new SqlServerVarBinaryColumn(name, length, isNullable, def));

            case ColumnTypeName.Bool:
                return(new SqlServerBitColumn(name, isNullable, def));

            case ColumnTypeName.Char:
                return(new SqlServerCharColumn(name, length, isNullable, def, collation));

            case ColumnTypeName.Date:
                return(new SqlServerDateColumn(name, isNullable, def));

            case ColumnTypeName.DateTime:
                return(new SqlServerDatetimeColumn(name, isNullable, def));

            case ColumnTypeName.DateTime2:
                return(new SqlServerDatetime2Column(name, scale, isNullable, def));

            case ColumnTypeName.Dec:
                return(new SqlServerDecColumn(name, prec, scale, isNullable, isIdentity, def));

            case ColumnTypeName.Float:
                return(new SqlServerFloatColumn(name, prec, isNullable, def));

            case ColumnTypeName.Guid:
                return(new SqlServerGuidColumn(name, isNullable, def));

            case ColumnTypeName.Int:
                return(new SqlServerIntColumn(name, isNullable, isIdentity, def));

            case ColumnTypeName.Int16:
                return(new SqlServerSmallIntColumn(name, isNullable, isIdentity, def));

            case ColumnTypeName.Int64:
                return(new SqlServerBigIntColumn(name, isNullable, isIdentity, def));

            case ColumnTypeName.Int8:
                return(new SqlServerTinyIntColumn(name, isNullable, isIdentity, def));

            case ColumnTypeName.LongText:
                return(new SqlServerVarcharColumn(name, -1, isNullable, def, collation));

            case ColumnTypeName.NChar:
                return(new SqlServerNCharColumn(name, length, isNullable, def, collation));

            case ColumnTypeName.NLongText:
                return(new SqlServerNVarcharColumn(name, -1, isNullable, def, collation));

            case ColumnTypeName.NOldText:
                return(new SqlServerNTextColumn(name, isNullable, def, collation));

            case ColumnTypeName.NVarchar:
                return(new SqlServerNVarcharColumn(name, length, isNullable, def, collation));

            case ColumnTypeName.OldBlob:
                return(new SqlServerImageColumn(name, isNullable, def));

            case ColumnTypeName.OldText:
                return(new SqlServerTextColumn(name, isNullable, def, collation));

            case ColumnTypeName.Money:
                return(new SqlServerMoneyColumn(name, isNullable, def));

            case ColumnTypeName.Raw:
                return(new SqlServerBinaryColumn(name, length, isNullable, def));

            case ColumnTypeName.SmallDateTime:
                return(new SqlServerSmallDateTimeColumn(name, isNullable, def));

            case ColumnTypeName.SmallMoney:
                return(new SqlServerSmallMoneyColumn(name, isNullable, def));

            case ColumnTypeName.Time:
                return(new SqlServerTimeColumn(name, isNullable, def));

            case ColumnTypeName.Timestamp:
                return(new SqlServerTimestampColumn(name, isNullable, def));

            case ColumnTypeName.Varchar:
                return(new SqlServerVarcharColumn(name, length, isNullable, def, collation));

            case ColumnTypeName.VarRaw:
                return(new SqlServerVarBinaryColumn(name, length, isNullable, def));
            }

            throw new AColumnTypeException($"Illegal type: {type}");
        }
Пример #9
0
 public IColumn CreateInstance(ColumnTypeName type, string name, bool isNullable, string def)
 {
     return(CreateInstance(type, name, 0, 0, 0, isNullable, false, def, ""));
 }
Пример #10
0
 public IColumn CreateInstance(ColumnTypeName type, string name, int length, bool isNullable, string def, string collation)
 {
     return(CreateInstance(type, name, length, 0, 0, isNullable, false, def, collation));
 }
Пример #11
0
        public override ITableDefinition GetTableDefinition(IColumnTypeConverter columnTypeConverter, string tableName)
        {
            string selectStmt = "";

            selectStmt += "SELECT c.name, " + "\n";
            selectStmt += "       t.name AS t_name, " + "\n";
            selectStmt += "       isnull(c.max_length, 0) as length, " + "\n";
            selectStmt += "       isnull(c.precision, 0) as prec, " + "\n";
            selectStmt += "       isnull(c.scale, 0) as scale, " + "\n";
            selectStmt += "       c.is_nullable, " + "\n";
            selectStmt += "       convert(varchar(256), isnull(c.collation_name, '')) as collation, " + "\n";
            selectStmt += "       isnull(object_definition(c.default_object_id), '') as def, " + "\n";
            selectStmt += "       c.is_identity " + "\n";
            selectStmt += "FROM   sys.columns c " + "\n";
            selectStmt += "       JOIN sys.types t " + "\n";
            selectStmt += "         ON c.user_type_id = t.user_type_id " + "\n";
            selectStmt += string.Format("WHERE  c.object_id = Object_id('{0}') ", tableName) + "\n";
            selectStmt += "ORDER  BY c.column_id ";

            IColumnFactory columnFactory      = DbContext.PowerPlant.CreateColumnFactory();
            List <IColumn> columns            = new List <IColumn>();
            bool           tableHasBlobColumn = false;
            IDataCursor    cursor             = null;

            try
            {
                cursor = DbContext.PowerPlant.CreateDataCursor();
                IDataReader reader = cursor.ExecuteReader(selectStmt);
                while (reader.Read())
                {
                    string name   = reader.GetString(0);
                    string type   = reader.GetString(1);
                    int    length = reader.GetInt16(2);
                    if (length != -1 && (type == "nvarchar" || type == "nchar"))
                    {
                        length /= 2;
                    }
                    int prec  = reader.GetByte(3);
                    int scale = reader.GetByte(4);
                    if (scale != 0 && type == "datetime2")
                    {
                        prec = 0;
                    }
                    bool           isNullable = reader.GetBoolean(5);
                    string         collation  = reader.GetString(6);
                    string         def        = reader.GetString(7);
                    bool           isIdentity = reader.GetBoolean(8);
                    string         sourceType = type.AddParameters();
                    ColumnTypeName colType    = columnTypeConverter.GetDestinationType(sourceType, ref length, ref prec, ref scale).ColumnTypeName(length);
                    if (colType == ColumnTypeName.Blob || colType == ColumnTypeName.OldBlob)
                    {
                        tableHasBlobColumn = true;
                    }
                    columns.Add(
                        columnFactory.CreateInstance(
                            colType,
                            name,
                            length,
                            prec,
                            scale,
                            isNullable,
                            isIdentity,
                            def,
                            collation)
                        );
                }
            }
            catch (Exception ex)
            {
                throw new ADatabaseException("ERROR when Get TableDefinition: " + selectStmt, ex);
            }
            finally
            {
                if (cursor != null)
                {
                    cursor.Close();
                }
            }

            ITableDefinition tableDefinition = DbContext.PowerPlant.CreateTableDefinition(tableName, columns, GetSegmentName(tableName));

            tableDefinition.HasBlobColumn = tableHasBlobColumn;

            tableDefinition.Columns.RemoveAll(c => c.Name == "agrtid");

            return(tableDefinition);
        }
Пример #12
0
 private void TestNumberColumn(ColumnTypeName type, int prec, int scale)
 {
     TestColumn(type, 0, prec, scale, false, "0", "");
 }
Пример #13
0
 private void TestStringColumn(ColumnTypeName colType)
 {
     TestColumn(colType, 50, 0, 0, false, "' '", "");
 }
Пример #14
0
        public IColumn CreateInstance(ColumnTypeName type, string name, int length, int prec, int scale, bool isNullable, bool isIdentity, string def, string collation)
        {
            switch (type)
            {
            case ColumnTypeName.BinaryDouble:
                return(new OracleBinaryDoubleColumn(name, isNullable, def));

            case ColumnTypeName.BinaryFloat:
                return(new OracleBinaryFloatColumn(name, isNullable, def));

            case ColumnTypeName.Blob:
                return(new OracleBlobColumn(name, isNullable, def));

            case ColumnTypeName.Bool:
            case ColumnTypeName.Dec:
            case ColumnTypeName.Int:
            case ColumnTypeName.Int16:
            case ColumnTypeName.Int64:
            case ColumnTypeName.Int8:
            case ColumnTypeName.Money:
            case ColumnTypeName.SmallMoney:
                return(new OracleNumberColumn(name, type, prec, scale, isNullable, def));

            case ColumnTypeName.Char:
                return(new OracleCharColumn(name, length, isNullable, def));

            case ColumnTypeName.Date:
            case ColumnTypeName.DateTime:
                return(new OracleDateColumn(name, isNullable, def));

            case ColumnTypeName.DateTime2:
                return(new OracleTimestampColumn(name, scale, isNullable, def));

            case ColumnTypeName.Float:
                return(new OracleFloatColumn(name, prec, isNullable, def));

            case ColumnTypeName.Guid:
                return(new OracleRawColumn(name, type, 16, isNullable, def));

            case ColumnTypeName.LongText:
                return(new OracleClobColumn(name, isNullable, def));

            case ColumnTypeName.NChar:
                return(new OracleNCharColumn(name, length, isNullable, def));

            case ColumnTypeName.NLongText:
                return(new OracleNClobColumn(name, isNullable, def));

            case ColumnTypeName.NVarchar:
                return(new OracleNVarchar2Column(name, length, isNullable, def));

            case ColumnTypeName.OldBlob:
                return(new OracleLongRawColumn(name, isNullable, def));

            case ColumnTypeName.OldText:
                return(new OracleLongColumn(name, isNullable, def));

            case ColumnTypeName.Raw:
                return(new OracleRawColumn(name, type, length, isNullable, def));

            case ColumnTypeName.SmallDateTime:
            case ColumnTypeName.Time:
                return(new OracleDateColumn(name, isNullable, def));

            case ColumnTypeName.Varchar:
                return(new OracleVarchar2Column(name, length, isNullable, def));
            }

            throw new AColumnTypeException($"Illegal type: {type}");
        }
Пример #15
0
 private void TestNumberColumn(ColumnTypeName type)
 {
     TestColumn(type, 0, 0, 0, false, "0", "");
 }
Пример #16
0
 private void TestStringColumn(ColumnTypeName colType)
 {
     TestColumn(colType, 50, 0, 0, false, "' '", "Danish_Norwegian_CI_AS");
 }