public void TypeString() { var typewriter = new DataTypeWriter(); var column = new DatabaseColumn(); column.DataType = new DataType("VARCHAR2", "System.String"); var result = typewriter.Write(column); Assert.AreEqual("string", result); }
public void TypeInteger() { var typewriter = new DataTypeWriter(); var column = new DatabaseColumn(); column.DataType = new DataType("NUMBER", "System.Int32"); var result = typewriter.Write(column); Assert.AreEqual("int", result); }
public void TestBinary() { //arrange _column.DbDataType = "BINARY"; _column.Length = 400; //specify that we are coming from SqlServer, so keep Binary format var typeWriter = new DataTypeWriter(SqlType.SqlServer); //act var result = typeWriter.WriteDataType(_column); //assert Assert.AreEqual("BINARY (400)", result); }
public override void PostProcessing(DatabaseTable databaseTable) { if (databaseTable == null) { return; } //the devart providers GetSchema are a little weird so we fix them up here var typeWriter = new DataTypeWriter(); foreach (var databaseColumn in databaseTable.Columns) { var santizedType = typeWriter.WriteDataType(databaseColumn); //all the different native types are reworked if ((santizedType.StartsWith("VARCHAR", StringComparison.OrdinalIgnoreCase) || santizedType.StartsWith("CHAR", StringComparison.OrdinalIgnoreCase))) { if (databaseColumn.Length == -1 && databaseColumn.Precision > 0) { databaseColumn.Length = databaseColumn.Precision; databaseColumn.Precision = -1; } } if ((santizedType.StartsWith("NUMERIC", StringComparison.OrdinalIgnoreCase) || santizedType.StartsWith("DECIMAL", StringComparison.OrdinalIgnoreCase) || santizedType.StartsWith("INTEGER", StringComparison.OrdinalIgnoreCase))) { if (databaseColumn.Length > 0 && databaseColumn.Precision == -1) { databaseColumn.Precision = databaseColumn.Length; databaseColumn.Length = -1; } } //if it's a varchar or char, and the length is -1 but the precision is positive, swap them //and vice versa for numerics. var defaultValue = databaseColumn.DefaultValue; if (!string.IsNullOrEmpty(defaultValue) && defaultValue.StartsWith("nextval('", StringComparison.OrdinalIgnoreCase)) { databaseColumn.IsAutoNumber = true; databaseColumn.IsPrimaryKey = true; } //if defaultValue looks like the nextval from a sequence, it's a pk //change the type to serial (or bigserial), ensure it's the primary key } }