11using System ;
22using System . Collections . Generic ;
33using System . Data ;
4- using System . Data . SqlClient ;
54using System . Data . SqlServerCe ;
65using System . Linq ;
76using Simple . Data . Ado ;
@@ -37,20 +36,12 @@ private static Table SchemaRowToTable(DataRow row)
3736
3837 public IEnumerable < Column > GetColumns ( Table table )
3938 {
40- foreach ( var row in GetColumnsDataTable ( table ) . AsEnumerable ( ) )
41- {
42- yield return new Column ( row [ "COLUMN_NAME" ] . ToString ( ) , table ) ;
43- }
44- }
45-
46- private static Column SchemaRowToColumn ( Table table , DataRow row )
47- {
48- return new Column ( row [ "name" ] . ToString ( ) , table , ( bool ) row [ "is_identity" ] ) ;
39+ return Enumerable . Select ( GetColumnsDataTable ( table ) . AsEnumerable ( ) , row => new Column ( row [ "COLUMN_NAME" ] . ToString ( ) , table , row [ "AUTOINC_SEED" ] != null ) ) ;
4940 }
5041
5142 public IEnumerable < Procedure > GetStoredProcedures ( )
5243 {
53- return GetSchema ( "Procedures" ) . Select ( SchemaRowToStoredProcedure ) ;
44+ return Enumerable . Empty < Procedure > ( ) ;
5445 }
5546
5647 private IEnumerable < DataRow > GetSchema ( string collectionName , params string [ ] constraints )
@@ -63,34 +54,9 @@ private IEnumerable<DataRow> GetSchema(string collectionName, params string[] co
6354 }
6455 }
6556
66- private static Procedure SchemaRowToStoredProcedure ( DataRow row )
67- {
68- return new Procedure ( row [ "ROUTINE_NAME" ] . ToString ( ) , row [ "SPECIFIC_NAME" ] . ToString ( ) , row [ "ROUTINE_SCHEMA" ] . ToString ( ) ) ;
69- }
70-
7157 public IEnumerable < Parameter > GetParameters ( Procedure storedProcedure )
7258 {
73- return GetSchema ( "ProcedureParameters" , null , storedProcedure . Schema , storedProcedure . SpecificName )
74- . Select ( SchemaRowToProcedureParameter ) ;
75- }
76-
77- private static Parameter SchemaRowToProcedureParameter ( DataRow row )
78- {
79- return new Parameter ( row [ "parameter_name" ] . ToString ( ) , SqlTypeResolver . GetClrType ( row [ "data_type" ] . ToString ( ) ) ,
80- DirectionFromString ( row [ "parameter_mode" ] . ToString ( ) ) ) ;
81- }
82-
83- private static ParameterDirection DirectionFromString ( string mode )
84- {
85- switch ( mode )
86- {
87- case "IN" :
88- return ParameterDirection . Input ;
89- case "OUT" :
90- return ParameterDirection . Output ;
91- default :
92- return ParameterDirection . InputOutput ;
93- }
59+ return Enumerable . Empty < Parameter > ( ) ;
9460 }
9561
9662 public Key GetPrimaryKey ( Table table )
@@ -99,7 +65,7 @@ public Key GetPrimaryKey(Table table)
9965 return new Key ( GetPrimaryKeys ( table . ActualName ) . AsEnumerable ( )
10066 . Where (
10167 row =>
102- row [ "TABLE_SCHEMA" ] . ToString ( ) == table . Schema && row [ "TABLE_NAME" ] . ToString ( ) == table . ActualName )
68+ AreEqual ( row [ "TABLE_SCHEMA" ] , table . Schema ) && row [ "TABLE_NAME" ] . ToString ( ) == table . ActualName )
10369 . OrderBy ( row => ( int ) row [ "ORDINAL_POSITION" ] )
10470 . Select ( row => row [ "COLUMN_NAME" ] . ToString ( ) ) ) ;
10571 }
@@ -108,20 +74,29 @@ public IEnumerable<ForeignKey> GetForeignKeys(Table table)
10874 {
10975 if ( table == null ) throw new ArgumentNullException ( "table" ) ;
11076 var groups = GetForeignKeys ( table . ActualName )
111- . Where ( row =>
112- row [ "TABLE_SCHEMA" ] . ToString ( ) == table . Schema && row [ "TABLE_NAME" ] . ToString ( ) == table . ActualName )
77+ . Where ( row => AreEqual ( row [ "TABLE_SCHEMA" ] , table . Schema )
78+ && row [ "TABLE_NAME" ] . ToString ( ) == table . ActualName )
11379 . GroupBy ( row => row [ "CONSTRAINT_NAME" ] . ToString ( ) )
11480 . ToList ( ) ;
11581
11682 foreach ( var group in groups )
11783 {
118- yield return new ForeignKey ( new ObjectName ( group . First ( ) [ "TABLE_SCHEMA" ] . ToString ( ) , group . First ( ) [ "TABLE_NAME" ] . ToString ( ) ) ,
84+ yield return new ForeignKey ( new ObjectName ( group . First ( ) [ "TABLE_SCHEMA" ] , group . First ( ) [ "TABLE_NAME" ] ) ,
11985 group . Select ( row => row [ "COLUMN_NAME" ] . ToString ( ) ) ,
120- new ObjectName ( group . First ( ) [ "UNIQUE_TABLE_SCHEMA" ] . ToString ( ) , group . First ( ) [ "UNIQUE_TABLE_NAME" ] . ToString ( ) ) ,
86+ new ObjectName ( group . First ( ) [ "UNIQUE_TABLE_SCHEMA" ] , group . First ( ) [ "UNIQUE_TABLE_NAME" ] ) ,
12187 group . Select ( row => row [ "UNIQUE_COLUMN_NAME" ] . ToString ( ) ) ) ;
12288 }
12389 }
12490
91+ private static bool AreEqual ( object string1 , object string2 )
92+ {
93+ if ( string1 == DBNull . Value ) string1 = null ;
94+ if ( string2 == DBNull . Value ) string2 = null ;
95+ if ( string1 == null && string2 == null ) return true ;
96+ if ( string1 == null || string2 == null ) return false ;
97+ return string1 . ToString ( ) . Trim ( ) . Equals ( string2 . ToString ( ) . Trim ( ) ) ;
98+ }
99+
125100 public string QuoteObjectName ( string unquotedName )
126101 {
127102 if ( unquotedName == null ) throw new ArgumentNullException ( "unquotedName" ) ;
@@ -136,7 +111,7 @@ public Type DataTypeToClrType(string dataType)
136111
137112 private DataTable GetColumnsDataTable ( Table table )
138113 {
139- return SelectToDataTable ( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table . ActualName + "'" ) ;
114+ return SelectToDataTable ( "SELECT COLUMN_NAME, AUTOINC_SEED FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table . ActualName + "'" ) ;
140115 }
141116
142117 private DataTable GetPrimaryKeys ( )
0 commit comments