1 #region MIT license
2 //
3 // MIT license
4 //
5 // Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a copy
8 // of this software and associated documentation files (the "Software"), to deal
9 // in the Software without restriction, including without limitation the rights
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 // copies of the Software, and to permit persons to whom the Software is
12 // furnished to do so, subject to the following conditions:
13 //
14 // The above copyright notice and this permission notice shall be included in
15 // all copies or substantial portions of the Software.
16 //
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 // THE SOFTWARE.
24 //
25 #endregion
26 using System.Collections.Generic;
27 using System.Data;
28 using DbLinq.Util;
29 using DbLinq.Vendor;
30 
31 namespace DbLinq.Oracle
32 {
33     partial class OracleSchemaLoader
34     {
ReadColumn(IDataReader rdr)35         protected virtual IDataTableColumn ReadColumn(IDataReader rdr)
36         {
37             var column = new DataTableColumn();
38             int field = 0;
39             column.TableSchema = rdr.GetString(field++);
40             column.TableName = rdr.GetString(field++);
41             column.ColumnName = rdr.GetString(field++);
42             column.SqlType = rdr.GetString(field++);
43             column.Length = rdr.GetAsNullableNumeric<long>(field++);
44             column.Precision = rdr.GetAsNullableNumeric<int>(field++);
45             column.Scale = rdr.GetAsNullableNumeric<int>(field++);
46             string nullableStr = rdr.GetString(field++);
47             column.Nullable = nullableStr == "Y";
48             column.FullType = column.SqlType;
49             return column;
50         }
51 
ReadColumns(IDbConnection connectionString, string databaseName)52         protected override IList<IDataTableColumn> ReadColumns(IDbConnection connectionString, string databaseName)
53         {
54             const string sql = @"
55 SELECT owner, table_name, column_name,
56   case when data_type like 'TIMESTAMP%' then 'TIMESTAMP'
57        when data_type like 'INTERVAL%' then 'INTERVAL'
58   else data_type
59   end data_type ,
60     data_length, data_precision, data_scale, nullable
61 FROM all_tab_columns
62 WHERE table_name NOT LIKE '%$%'
63     AND table_name NOT LIKE 'LOGMNR%'
64     AND table_name NOT LIKE 'MVIEW%'
65     AND table_name NOT IN ('SQLPLUS_PRODUCT_PROFILE','HELP', 'PRODUCT_PRIVS')
66     -- skip nested table columns
67     AND data_type_owner is null
68     AND lower(owner) = :owner
69 ORDER BY table_name, column_id";
70 
71             return DataCommand.Find<IDataTableColumn>(connectionString, sql, ":owner", databaseName.ToLower(), ReadColumn);
72         }
73     }
74 }
75