@@ -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- }
28-
29- var tableNames = new List < string > ( ) ;
30- tableNames . AddRange ( options . Tables ) ;
24+ var connectionStartedOpen = ydbConnection . State == ConnectionState . Open ;
3125
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- } ;
33+ var tableNames = new List < string > ( ) ;
34+ tableNames . AddRange ( options . Tables ) ;
4635
47- foreach ( var ydbTable in tableNames . Select ( tableName =>
48- YdbSchema . DescribeTable ( ydbConnection , tableName ) . GetAwaiter ( ) . GetResult ( ) ) )
49- {
50- var databaseTable = new DatabaseTable
36+ if ( tableNames . Count == 0 )
5137 {
52- Name = ydbTable . Name ,
53- Database = databaseModel
54- } ;
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+ }
5545
56- var columnNameToDatabaseColumn = new Dictionary < string , DatabaseColumn > ( ) ;
46+ var databaseModel = new DatabaseModel
47+ {
48+ DatabaseName = connection . Database
49+ } ;
5750
58- foreach ( var column in ydbTable . Columns )
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 } ;
6759
68- databaseTable . Columns . Add ( databaseColumn ) ;
69- columnNameToDatabaseColumn [ column . Name ] = databaseColumn ;
70- }
60+ var columnNameToDatabaseColumn = new Dictionary < string , DatabaseColumn > ( ) ;
7161
72- foreach ( var index in ydbTable . Indexes )
73- {
74- var databaseIndex = new DatabaseIndex
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 } ;
8098
81- foreach ( var columnName in index . IndexColumns )
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 }
86103
87- databaseTable . Indexes . Add ( databaseIndex ) ;
104+ databaseModel . Tables . Add ( databaseTable ) ;
88105 }
89106
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 )
107+ return databaseModel ;
108+ }
109+ finally
110+ {
111+ if ( ! connectionStartedOpen )
96112 {
97- databaseTable . PrimaryKey . Columns . Add ( columnNameToDatabaseColumn [ columnName ] ) ;
113+ ydbConnection . Close ( ) ;
98114 }
99-
100- databaseModel . Tables . Add ( databaseTable ) ;
101115 }
102-
103- return databaseModel ;
104116 }
105117}
0 commit comments