miniSql

创建
zgc123@gmail.com authored at 11/19/2023 1:40:15 AM
6136600
Tree
0 Parent(s)
Summary: 1 changed files with 101 additions and 0 deletions.
Added +101 -0
Added +101 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OracleSchemaService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OracleSchemaService.cs
new file mode 100644
index 0000000..74f9472
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OracleSchemaService.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+    public class OracleSchemaService : GenericSchemaService
+    {
+
+        protected override int SafeGetInt(DataRow row, string columnName)
+        {
+            try
+            {
+                return base.SafeGetInt(row, columnName);
+            }
+            catch (OverflowException)
+            {
+                // Coerce to Max.Int32
+                return Int32.MaxValue;
+            }
+        }
+
+        public override DbModelInstance GetDbObjectModel(string connection)
+        {
+
+            //_connection = connection;
+
+            DbModelInstance model = new DbModelInstance();
+            DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);
+
+            using (DbConnection dbConn = factory.CreateConnection())
+            {
+                dbConn.ConnectionString = connection;
+                dbConn.Open();
+
+                DataTable tables = dbConn.GetSchema("Tables");
+                Dictionary<string, DbModelType> dbTypes = GetDbTypes(dbConn);
+                model.Types = dbTypes;
+                model.ProviderName = ProviderName;
+                model.ConnectionString = connection;
+
+                if (tables == null)
+                {
+                    return model;
+                }
+
+                DataView tablesDV = new DataView(tables, "", "OWNER, TABLE_NAME", DataViewRowState.CurrentRows);
+
+                foreach (DataRowView row in tablesDV)
+                {
+                    string schemaName = SafeGetString(row.Row, "OWNER");
+                    string tableName = SafeGetString(row.Row, "TABLE_NAME");
+
+                    DbModelTable dbTable = new DbModelTable { Schema = schemaName, Name = tableName };
+                    model.Add(dbTable);
+
+                    DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
+                    GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
+                }
+
+                DataTable views = dbConn.GetSchema("Views");
+                DataView viewsDV = new DataView(views, "", "OWNER, VIEW_NAME", DataViewRowState.CurrentRows);
+                foreach (DataRowView row in viewsDV)
+                {
+                    string schemaName = SafeGetString(row.Row, "OWNER");
+                    string tableName = SafeGetString(row.Row, "VIEW_NAME");
+
+                    DbModelView dbTable = new DbModelView { Schema = schemaName, Name = tableName };
+                    model.Add(dbTable);
+
+                    DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
+                    GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
+                }
+
+                // build FK relationships 
+                if (model.Tables != null)
+                {
+                    foreach (DbModelTable table in model.Tables)
+                    {
+                        GetForeignKeyReferencesForTable(dbConn, table);
+                        ProcessForeignKeyReferencesForTable(dbConn, table);
+                    }
+                }
+
+                // build FK relationships
+                if (model.Views != null)
+                {
+                    foreach (DbModelView view in model.Views)
+                    {
+                        GetForeignKeyReferencesForTable(dbConn, view);
+                        ProcessForeignKeyReferencesForTable(dbConn, view);
+                    }
+                }
+            }
+
+            return model;
+        }
+
+    }
+}