@@ -21,85 +21,97 @@ public override DatabaseModel Create(string connectionString, DatabaseModelFacto
2121 public override DatabaseModel Create ( DbConnection connection , DatabaseModelFactoryOptions options )
2222 {
2323 var ydbConnection = ( YdbConnection ) connection ;
24- if ( connection . State != ConnectionState . Open )
25- {
26- connection . Open ( ) ;
27- }
24+ var connectionStartedOpen = ydbConnection . State == ConnectionState . Open ;
2825
29- var tableNames = new List < string > ( ) ;
30- tableNames . AddRange ( options . Tables ) ;
31-
32- if ( tableNames . Count == 0 )
26+ if ( ! connectionStartedOpen )
3327 {
34- tableNames . AddRange (
35- from ydbObject in YdbSchema . SchemaObjects ( ydbConnection ) . GetAwaiter ( ) . GetResult ( )
36- where ydbObject . Type is SchemeType . Table or SchemeType . ColumnTable or SchemeType . ExternalTable &&
37- ! ydbObject . IsSystem
38- select ydbObject . Name
39- ) ;
28+ ydbConnection . Open ( ) ;
4029 }
4130
42- var databaseModel = new DatabaseModel
31+ try
4332 {
44- DatabaseName = connection . Database
45- } ;
46-
47- foreach ( var ydbTable in tableNames . Select ( tableName =>
48- YdbSchema . DescribeTable ( ydbConnection , tableName ) . GetAwaiter ( ) . GetResult ( ) ) )
49- {
50- var databaseTable = new DatabaseTable
33+ var tableNames = new List < string > ( ) ;
34+ tableNames . AddRange ( options . Tables ) ;
35+
36+ if ( tableNames . Count == 0 )
37+ {
38+ tableNames . AddRange (
39+ from ydbObject in YdbSchema . SchemaObjects ( ydbConnection ) . GetAwaiter ( ) . GetResult ( )
40+ where ydbObject . Type is SchemeType . Table or SchemeType . ColumnTable or SchemeType . ExternalTable &&
41+ ! ydbObject . IsSystem
42+ select ydbObject . Name
43+ ) ;
44+ }
45+
46+ var databaseModel = new DatabaseModel
5147 {
52- Name = ydbTable . Name ,
53- Database = databaseModel
48+ DatabaseName = connection . Database
5449 } ;
55-
56- var columnNameToDatabaseColumn = new Dictionary < string , DatabaseColumn > ( ) ;
57-
58- foreach ( var column in ydbTable . Columns )
50+
51+ foreach ( var ydbTable in tableNames . Select ( tableName =>
52+ YdbSchema . DescribeTable ( ydbConnection , tableName ) . GetAwaiter ( ) . GetResult ( ) ) )
5953 {
60- var databaseColumn = new DatabaseColumn
54+ var databaseTable = new DatabaseTable
6155 {
62- Name = column . Name ,
63- Table = databaseTable ,
64- StoreType = column . StorageType ,
65- IsNullable = column . IsNullable
56+ Name = ydbTable . Name ,
57+ Database = databaseModel
6658 } ;
67-
68- databaseTable . Columns . Add ( databaseColumn ) ;
69- columnNameToDatabaseColumn [ column . Name ] = databaseColumn ;
70- }
71-
72- foreach ( var index in ydbTable . Indexes )
73- {
74- var databaseIndex = new DatabaseIndex
59+
60+ var columnNameToDatabaseColumn = new Dictionary < string , DatabaseColumn > ( ) ;
61+
62+ foreach ( var column in ydbTable . Columns )
7563 {
76- Name = index . Name ,
77- Table = databaseTable ,
78- IsUnique = index . Type == YdbTableIndex . IndexType . GlobalUniqueIndex
64+ var databaseColumn = new DatabaseColumn
65+ {
66+ Name = column . Name ,
67+ Table = databaseTable ,
68+ StoreType = column . StorageType ,
69+ IsNullable = column . IsNullable
70+ } ;
71+
72+ databaseTable . Columns . Add ( databaseColumn ) ;
73+ columnNameToDatabaseColumn [ column . Name ] = databaseColumn ;
74+ }
75+
76+ foreach ( var index in ydbTable . Indexes )
77+ {
78+ var databaseIndex = new DatabaseIndex
79+ {
80+ Name = index . Name ,
81+ Table = databaseTable ,
82+ IsUnique = index . Type == YdbTableIndex . IndexType . GlobalUniqueIndex
83+ } ;
84+
85+ foreach ( var columnName in index . IndexColumns )
86+ {
87+ databaseIndex . Columns . Add ( columnNameToDatabaseColumn [ columnName ] ) ;
88+ databaseIndex . IsDescending . Add ( false ) ;
89+ }
90+
91+ databaseTable . Indexes . Add ( databaseIndex ) ;
92+ }
93+
94+ databaseTable . PrimaryKey = new DatabasePrimaryKey
95+ {
96+ Name = null // YDB does not have a primary key named
7997 } ;
80-
81- foreach ( var columnName in index . IndexColumns )
98+
99+ foreach ( var columnName in ydbTable . PrimaryKey )
82100 {
83- databaseIndex . Columns . Add ( columnNameToDatabaseColumn [ columnName ] ) ;
84- databaseIndex . IsDescending . Add ( false ) ;
101+ databaseTable . PrimaryKey . Columns . Add ( columnNameToDatabaseColumn [ columnName ] ) ;
85102 }
86-
87- databaseTable . Indexes . Add ( databaseIndex ) ;
103+
104+ databaseModel . Tables . Add ( databaseTable ) ;
88105 }
89-
90- databaseTable . PrimaryKey = new DatabasePrimaryKey
91- {
92- Name = null // YDB does not have a primary key named
93- } ;
94-
95- foreach ( var columnName in ydbTable . PrimaryKey )
106+ }
107+ finally
108+ {
109+ if ( ! connectionStartedOpen )
96110 {
97- databaseTable . PrimaryKey . Columns . Add ( columnNameToDatabaseColumn [ columnName ] ) ;
111+ ydbConnection . Close ( ) ;
98112 }
99-
100- databaseModel . Tables . Add ( databaseTable ) ;
101113 }
102-
114+
103115 return databaseModel ;
104116 }
105117}
0 commit comments