1515
1616//$Authors = Jiri Cincura (jiri@cincura.net)
1717
18+ using System . Linq ;
19+ using System . Threading . Tasks ;
1820using FirebirdSql . EntityFrameworkCore . Firebird . Scaffolding . Internal ;
1921using Microsoft . EntityFrameworkCore . Scaffolding ;
2022using NUnit . Framework ;
@@ -30,6 +32,81 @@ public void JustCanRun()
3032Assert . DoesNotThrow ( ( ) => modelFactory . Create ( Connection , new DatabaseModelFactoryOptions ( ) ) ) ;
3133}
3234
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+
33110static IDatabaseModelFactory GetModelFactory ( )
34111{
35112return new FbDatabaseModelFactory ( ) ;
0 commit comments