15
15
16
16
//$Authors = Jiri Cincura ([email protected] )
17
17
18
+ using System . Linq ;
19
+ using System . Threading . Tasks ;
18
20
using FirebirdSql . EntityFrameworkCore . Firebird . Scaffolding . Internal ;
19
21
using Microsoft . EntityFrameworkCore . Scaffolding ;
20
22
using NUnit . Framework ;
@@ -30,6 +32,81 @@ public void JustCanRun()
30
32
Assert . DoesNotThrow ( ( ) => modelFactory . Create ( Connection , new DatabaseModelFactoryOptions ( ) ) ) ;
31
33
}
32
34
35
+ [ Test ]
36
+ public async Task ReadsNullableCorrect ( )
37
+ {
38
+ var tableName = "TEST_READS_IS_NULL_FROM_DOMAIN" ;
39
+ var columnNameNoDomainNull = "NO_DOMAIN_NULL" ;
40
+ var columnNameNoDomainNotNull = "NO_DOMAIN_NOT_NULL" ;
41
+ var columnNameDomainNull = "DOMAIN_NULL" ;
42
+ var columnNameDomainNotNull = "DOMAIN_NOT_NUL" ;
43
+
44
+ using var commandDomainNull = Connection . CreateCommand ( ) ;
45
+ commandDomainNull . CommandText = "create domain DOMAIN_NULL as INTEGER" ;
46
+ await commandDomainNull . ExecuteNonQueryAsync ( ) ;
47
+
48
+ using var commandDomainNotNull = Connection . CreateCommand ( ) ;
49
+ commandDomainNotNull . CommandText = "create domain DOMAIN_NOT_NULL as INTEGER NOT NULL" ;
50
+ await commandDomainNotNull . ExecuteNonQueryAsync ( ) ;
51
+
52
+ using var commandTable = Connection . CreateCommand ( ) ;
53
+ commandTable . CommandText = $ "create table { tableName } ({ columnNameNoDomainNull } INTEGER, { columnNameNoDomainNotNull } INTEGER NOT NULL, { columnNameDomainNull } DOMAIN_NULL, { columnNameDomainNotNull } DOMAIN_NOT_NULL)";
54
+ await commandTable . ExecuteNonQueryAsync ( ) ;
55
+
56
+ var modelFactory = GetModelFactory ( ) ;
57
+ var model = modelFactory . Create ( Connection . ConnectionString , new DatabaseModelFactoryOptions ( new string [ ] { tableName } ) ) ;
58
+ var table = model . Tables . Single ( x => x . Name == tableName ) ;
59
+ var columnNoDomainNull = table . Columns . Single ( x => x . Name == columnNameNoDomainNull ) ;
60
+ var columnNoDomainNotNull = table . Columns . Single ( x => x . Name == columnNameNoDomainNotNull ) ;
61
+ var columnDomainNull = table . Columns . Single ( x => x . Name == columnNameDomainNull ) ;
62
+ var columnDomainNotNull = table . Columns . Single ( x => x . Name == columnNameDomainNotNull ) ;
63
+
64
+ Assert . Multiple ( ( ) =>
65
+ {
66
+ Assert . That ( columnNoDomainNull . IsNullable , Is . True ) ;
67
+ Assert . That ( columnNoDomainNotNull . IsNullable , Is . False ) ;
68
+ Assert . That ( columnDomainNull . IsNullable , Is . True ) ;
69
+ Assert . That ( columnDomainNotNull . IsNullable , Is . False ) ;
70
+ } ) ;
71
+
72
+ }
73
+
74
+ [ TestCase ( "SMALLINT" ) ]
75
+ [ TestCase ( "INTEGER" ) ]
76
+ [ TestCase ( "FLOAT" ) ]
77
+ [ TestCase ( "DATE" ) ]
78
+ [ TestCase ( "TIME" ) ]
79
+ [ TestCase ( "CHAR(12)" ) ]
80
+ [ TestCase ( "BIGINT" ) ]
81
+ [ TestCase ( "BOOLEAN" ) ]
82
+ [ TestCase ( "DOUBLE PRECISION" ) ]
83
+ [ TestCase ( "TIMESTAMP" ) ]
84
+ [ TestCase ( "VARCHAR(24)" ) ]
85
+ [ TestCase ( "BLOB SUB_TYPE TEXT" ) ]
86
+ [ TestCase ( "BLOB SUB_TYPE BINARY" ) ]
87
+ [ TestCase ( "DECIMAL(4,1)" ) ]
88
+ [ TestCase ( "DECIMAL(9,1)" ) ]
89
+ [ TestCase ( "DECIMAL(18,1)" ) ]
90
+ [ TestCase ( "NUMERIC(4,1)" ) ]
91
+ [ TestCase ( "NUMERIC(9,1)" ) ]
92
+ [ TestCase ( "NUMERIC(18,1)" ) ]
93
+ public async Task ReadsCorrectFieldType ( string dataType )
94
+ {
95
+ var tableName = $ "TEST_READS_FIELD_TYPE_CORRECT";
96
+ var columnName = "FIELD" ;
97
+
98
+ using var commandTable = Connection . CreateCommand ( ) ;
99
+ commandTable . CommandText = $ "recreate table { tableName } ({ columnName } { dataType } )";
100
+ await commandTable . ExecuteNonQueryAsync ( ) ;
101
+
102
+ var modelFactory = GetModelFactory ( ) ;
103
+ var model = modelFactory . Create ( Connection . ConnectionString , new DatabaseModelFactoryOptions ( new string [ ] { tableName } ) ) ;
104
+ var table = model . Tables . Single ( x => x . Name == tableName ) ;
105
+ var column = table . Columns . Single ( x => x . Name == columnName ) ;
106
+
107
+ Assert . That ( column . StoreType , Is . EqualTo ( dataType ) ) ;
108
+ }
109
+
33
110
static IDatabaseModelFactory GetModelFactory ( )
34
111
{
35
112
return new FbDatabaseModelFactory ( ) ;
0 commit comments