Jo Shields 3c1f479b9d Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
2015-04-07 09:35:12 +01:00

1224 lines
46 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// OracleConnection.cs
//
// Part of the Mono class libraries at
// mcs/class/System.Data.OracleClient/System.Data.OracleClient
//
// Assembly: System.Data.OracleClient.dll
// Namespace: System.Data.OracleClient
//
// Authors:
// Daniel Morgan <monodanmorg@yahoo.com>
// Tim Coleman <tim@timcoleman.com>
// Hubert FONGARNAND <informatique.internet@fiducial.fr>
// Marek Safar <marek.safar@gmail.com>
//
// Copyright (C) Daniel Morgan, 2002, 2005, 2006, 2009
// Copyright (C) Tim Coleman, 2003
// Copyright (C) Hubert FONGARNAND, 2005
//
// Original source code for setting ConnectionString
// by Tim Coleman <tim@timcoleman.com>
//
// Copyright (C) Tim Coleman, 2002
//
// Licensed under the MIT/X11 License.
//
//#define ORACLE_DATA_ACCESS
// define ORACLE_DATA_ACCESS for Oracle.DataAccess functionality
// otherwise it defaults to Microsoft's System.Data.OracleClient
using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Data.OracleClient.Oci;
using System.Drawing.Design;
using System.EnterpriseServices;
using System.Globalization;
using System.Text;
//#if ORACLE_DATA_ACCESS
//namespace Oracle.DataAccess
//#else
namespace System.Data.OracleClient
//#endif
{
internal struct OracleConnectionInfo
{
internal string Username;
internal string Password;
internal string Database;
internal string ConnectionString;
internal OciCredentialType CredentialType;
internal bool SetNewPassword;
internal string NewPassword;
}
[DefaultEvent ("InfoMessage")]
public sealed class OracleConnection :
Common.DbConnection, ICloneable
{
#region Fields
OciGlue oci;
ConnectionState state;
OracleConnectionInfo conInfo;
OracleTransaction transaction;
string connectionString = String.Empty;
string parsedConnectionString;
OracleDataReader dataReader;
bool pooling = true;
static OracleConnectionPoolManager pools = new OracleConnectionPoolManager ();
OracleConnectionPool pool;
int minPoolSize;
int maxPoolSize = 100;
byte persistSecurityInfo = 1;
bool disposed;
IFormatProvider format_info;
#endregion // Fields
#region Constructors
public OracleConnection ()
{
state = ConnectionState.Closed;
}
public OracleConnection (string connectionString)
: this()
{
SetConnectionString (connectionString, false);
}
#endregion // Constructors
#region Properties
[MonoTODO ("Currently not respected.")]
public override int ConnectionTimeout {
get { return 0; }
}
[Browsable (false)]
[EditorBrowsable (EditorBrowsableState.Never)]
public override string Database {
[MonoTODO]
get { return String.Empty; }
}
internal OracleDataReader DataReader {
get { return dataReader; }
set { dataReader = value; }
}
internal OciEnvironmentHandle Environment {
get { return oci.Environment; }
}
internal OciErrorHandle ErrorHandle {
get { return oci.ErrorHandle; }
}
internal OciServiceHandle ServiceContext {
get { return oci.ServiceContext; }
}
internal OciSessionHandle Session {
get { return oci.SessionHandle; }
}
[Browsable (false)]
[MonoTODO]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
public
override
string DataSource {
get {
return conInfo.Database;
}
}
[Browsable (false)]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
public
override
ConnectionState State {
get { return state; }
}
[DefaultValue ("")]
[SettingsBindableAttribute (true)]
[RefreshProperties (RefreshProperties.All)]
[Editor ("Microsoft.VSDesigner.Data.Oracle.Design.OracleConnectionStringEditor, " + Consts.AssemblyMicrosoft_VSDesigner, typeof(UITypeEditor))]
public
override
string ConnectionString {
get {
if (parsedConnectionString == null)
return string.Empty;
return parsedConnectionString;
}
set {
SetConnectionString (value, false);
}
}
[MonoTODO]
[Browsable (false)]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
public
override
string ServerVersion {
get {
if (this.State != ConnectionState.Open)
throw new System.InvalidOperationException ("Invalid operation. The connection is closed.");
return GetOracleVersion ();
}
}
internal string GetOracleVersion ()
{
byte[] buffer = new Byte[256];
uint bufflen = (uint) buffer.Length;
IntPtr sh = oci.ServiceContext;
IntPtr eh = oci.ErrorHandle;
OciCalls.OCIServerVersion (sh, eh, ref buffer, bufflen, OciHandleType.Service);
// Get length of returned string
int rsize = 0;
IntPtr env = oci.Environment;
OciCalls.OCICharSetToUnicode (env, null, buffer, out rsize);
// Get string
StringBuilder ret = new StringBuilder(rsize);
OciCalls.OCICharSetToUnicode (env, ret, buffer, out rsize);
return ret.ToString ();
}
internal OciGlue Oci {
get { return oci; }
}
internal OracleTransaction Transaction {
get { return transaction; }
set { transaction = value; }
}
#endregion // Properties
#region Methods
public
new
OracleTransaction BeginTransaction ()
{
return BeginTransaction (IsolationLevel.ReadCommitted);
}
public
new
OracleTransaction BeginTransaction (IsolationLevel il)
{
if (state == ConnectionState.Closed)
throw new InvalidOperationException ("The connection is not open.");
if (transaction != null)
throw new InvalidOperationException ("OracleConnection does not support parallel transactions.");
OciTransactionHandle transactionHandle = oci.CreateTransaction ();
if (transactionHandle == null)
throw new Exception("Error: Unable to start transaction");
else {
transactionHandle.Begin ();
transaction = new OracleTransaction (this, il, transactionHandle);
}
return transaction;
}
[MonoTODO]
public override void ChangeDatabase (string value)
{
throw new NotImplementedException ();
}
public
new
OracleCommand CreateCommand ()
{
OracleCommand command = new OracleCommand ();
command.Connection = this;
return command;
}
[MonoTODO]
object ICloneable.Clone ()
{
OracleConnection con = new OracleConnection ();
con.SetConnectionString (connectionString, true);
// TODO: what other properties need to be cloned?
return con;
}
[MonoTODO]
protected override void Dispose (bool disposing)
{
if (!disposed) {
if (State == ConnectionState.Open)
Close ();
dataReader = null;
transaction = null;
oci = null;
pool = null;
conInfo.Username = string.Empty;
conInfo.Database = string.Empty;
conInfo.Password = string.Empty;
connectionString = null;
parsedConnectionString = null;
base.Dispose (disposing);
disposed = true;
}
}
[MonoTODO]
public void EnlistDistributedTransaction (ITransaction distributedTransaction)
{
throw new NotImplementedException ();
}
// Get NLS_DATE_FORMAT string from Oracle server
internal string GetSessionDateFormat ()
{
// 23 is 22 plus 1 for NUL terminated character
// a DATE format has a max size of 22
return GetNlsInfo (Session, 23, OciNlsServiceType.DATEFORMAT);
}
// Get NLS Info
//
// handle = OciEnvironmentHandle or OciSessionHandle
// bufflen = Length of byte buffer to allocate to retrieve the NLS info
// item = OciNlsServiceType enum value
//
// if unsure how much you need, use OciNlsServiceType.MAXBUFSZ
internal string GetNlsInfo (OciHandle handle, uint bufflen, OciNlsServiceType item)
{
byte[] buffer = new Byte[bufflen];
OciCalls.OCINlsGetInfo (handle, ErrorHandle,
ref buffer, bufflen, (ushort) item);
// Get length of returned string
int rsize = 0;
OciCalls.OCICharSetToUnicode (Environment, null, buffer, out rsize);
// Get string
StringBuilder ret = new StringBuilder (rsize);
OciCalls.OCICharSetToUnicode (Environment, ret, buffer, out rsize);
return ret.ToString ();
}
// An instance of IFormatProvider for locale - independent IFormattable.ToString () in Bind ()
[MonoTODO("Handle other culture-specific informations, restrict buffer sizes")]
internal IFormatProvider SessionFormatProvider {
get {
if (format_info == null && state == ConnectionState.Open) {
NumberFormatInfo numberFormatInfo = new NumberFormatInfo ();
numberFormatInfo.NumberGroupSeparator
= GetNlsInfo (Session, (uint)OciNlsServiceType.MAXBUFSZ, OciNlsServiceType.GROUP);
numberFormatInfo.NumberDecimalSeparator
= GetNlsInfo (Session, (uint)OciNlsServiceType.MAXBUFSZ, OciNlsServiceType.DECIMAL);
numberFormatInfo.CurrencyGroupSeparator
= GetNlsInfo (Session, (uint)OciNlsServiceType.MAXBUFSZ, OciNlsServiceType.MONGROUP);
numberFormatInfo.CurrencyDecimalSeparator
= GetNlsInfo (Session, (uint)OciNlsServiceType.MAXBUFSZ, OciNlsServiceType.MONDECIMAL);
format_info = numberFormatInfo;
}
return format_info;
}
}
public
override
void Open ()
{
if (State == ConnectionState.Open)
return;
PersistSecurityInfo ();
if (!pooling || conInfo.SetNewPassword == true) {
oci = new OciGlue ();
oci.CreateConnection (conInfo);
} else {
pool = pools.GetConnectionPool (conInfo, minPoolSize, maxPoolSize);
oci = pool.GetConnection ();
}
state = ConnectionState.Open;
CreateStateChange (ConnectionState.Closed, ConnectionState.Open);
}
#if ORACLE_DATA_ACCESS
public void OpenWithNewPassword (string newPassword)
{
if (State == ConnectionState.Open)
throw new InvalidOperationException ();
conInfo.SetNewPassword = true;
conInfo.NewPassword = newPassword;
Open ();
conInfo.SetNewPassword = false;
conInfo.NewPassword = string.Empty;
conInfo.Password = newPassword;
}
#endif
internal void CreateInfoMessage (OciErrorInfo info)
{
OracleInfoMessageEventArgs a = new OracleInfoMessageEventArgs (info);
OnInfoMessage (a);
}
private void OnInfoMessage (OracleInfoMessageEventArgs e)
{
if (InfoMessage != null)
InfoMessage (this, e);
}
internal void CreateStateChange (ConnectionState original, ConnectionState current)
{
StateChangeEventArgs a = new StateChangeEventArgs (original, current);
OnStateChange (a);
}
public
override
void Close ()
{
if (transaction != null)
transaction.Rollback ();
if (!pooling)
oci.Disconnect ();
else if (pool != null)
pool.ReleaseConnection (oci);
state = ConnectionState.Closed;
CreateStateChange (ConnectionState.Open, ConnectionState.Closed);
}
protected override Common.DbTransaction BeginDbTransaction (IsolationLevel isolationLevel)
{
return BeginTransaction (isolationLevel);
}
protected override Common.DbCommand CreateDbCommand ()
{
return CreateCommand ();
}
private void PersistSecurityInfo ()
{
// persistSecurityInfo:
// 0 = true/yes
// 1 = false/no (have not parsed out password yet)
// 2 = like 1, but have parsed out password
if (persistSecurityInfo == 0 || persistSecurityInfo == 2)
return;
persistSecurityInfo = 2;
if (connectionString == null || connectionString.Length == 0)
return;
string conString = connectionString + ";";
bool inQuote = false;
bool inDQuote = false;
int inParen = 0;
string name = String.Empty;
StringBuilder sb = new StringBuilder ();
int nStart = 0;
int nFinish = 0;
int i = -1;
foreach (char c in conString) {
i ++;
switch (c) {
case '\'':
inQuote = !inQuote;
break;
case '"' :
inDQuote = !inDQuote;
break;
case '(':
inParen++;
sb.Append (c);
break;
case ')':
inParen--;
sb.Append (c);
break;
case ';' :
if (!inDQuote && !inQuote) {
if (name != String.Empty && name != null) {
name = name.ToUpper ().Trim ();
if (name.Equals ("PASSWORD") || name.Equals ("PWD")) {
nFinish = i;
string part1 = String.Empty;
string part3 = String.Empty;
sb = new StringBuilder ();
if (nStart > 0) {
part1 = conString.Substring (0, nStart);
if (part1[part1.Length - 1] == ';')
part1 = part1.Substring (0, part1.Length - 1);
sb.Append (part1);
}
if (!part1.Equals (String.Empty))
sb.Append (';');
if (conString.Length - nFinish - 1 > 0) {
part3 = conString.Substring (nFinish, conString.Length - nFinish);
if (part3[0] == ';')
part3 = part3.Substring(1, part3.Length - 1);
sb.Append (part3);
}
parsedConnectionString = sb.ToString ();
return;
}
}
name = String.Empty;
sb = new StringBuilder ();
nStart = i;
nFinish = i;
}
else
sb.Append (c);
break;
case '=' :
if (!inDQuote && !inQuote && inParen == 0) {
name = sb.ToString ();
sb = new StringBuilder ();
}
else
sb.Append (c);
break;
default:
sb.Append (c);
break;
}
}
}
internal void SetConnectionString (string connectionString, bool persistSecurity)
{
persistSecurityInfo = 1;
conInfo.Username = string.Empty;
conInfo.Database = string.Empty;
conInfo.Password = string.Empty;
conInfo.CredentialType = OciCredentialType.RDBMS;
conInfo.SetNewPassword = false;
conInfo.NewPassword = string.Empty;
if (connectionString == null || connectionString.Length == 0) {
this.connectionString = connectionString;
this.parsedConnectionString = connectionString;
return;
}
this.connectionString = String.Copy (connectionString);
this.parsedConnectionString = this.connectionString;
connectionString += ";";
NameValueCollection parameters = new NameValueCollection ();
bool inQuote = false;
bool inDQuote = false;
int inParen = 0;
string name = String.Empty;
string value = String.Empty;
StringBuilder sb = new StringBuilder ();
foreach (char c in connectionString) {
switch (c) {
case '\'':
inQuote = !inQuote;
break;
case '"' :
inDQuote = !inDQuote;
break;
case '(':
inParen++;
sb.Append (c);
break;
case ')':
inParen--;
sb.Append (c);
break;
case ';' :
if (!inDQuote && !inQuote) {
if (name != String.Empty && name != null) {
name = name.ToUpper ().Trim ();
value = sb.ToString ().Trim ();
parameters [name] = value;
}
name = String.Empty;
value = String.Empty;
sb = new StringBuilder ();
}
else
sb.Append (c);
break;
case '=' :
if (!inDQuote && !inQuote && inParen == 0) {
name = sb.ToString ();
sb = new StringBuilder ();
}
else
sb.Append (c);
break;
default:
sb.Append (c);
break;
}
}
SetProperties (parameters);
conInfo.ConnectionString = this.connectionString;
if (persistSecurity)
PersistSecurityInfo ();
}
private void SetProperties (NameValueCollection parameters)
{
string value;
foreach (string name in parameters) {
value = parameters[name];
switch (name) {
case "UNICODE":
break;
case "ENLIST":
break;
case "CONNECTION LIFETIME":
// TODO:
break;
case "INTEGRATED SECURITY":
if (!ConvertToBoolean ("integrated security", value))
conInfo.CredentialType = OciCredentialType.RDBMS;
else
conInfo.CredentialType = OciCredentialType.External;
break;
case "PERSIST SECURITY INFO":
if (!ConvertToBoolean ("persist security info", value))
persistSecurityInfo = 1;
else
persistSecurityInfo = 0;
break;
case "MIN POOL SIZE":
minPoolSize = int.Parse (value);
break;
case "MAX POOL SIZE":
maxPoolSize = int.Parse (value);
break;
case "DATA SOURCE" :
case "SERVER" :
conInfo.Database = value;
break;
case "PASSWORD" :
case "PWD" :
conInfo.Password = value;
break;
case "UID" :
case "USER ID" :
conInfo.Username = value;
break;
case "POOLING" :
pooling = ConvertToBoolean("pooling", value);
break;
default:
throw new ArgumentException("Connection parameter not supported: '" + name + "'");
}
}
}
private bool ConvertToBoolean(string key, string value)
{
string upperValue = value.ToUpper();
if (upperValue == "TRUE" || upperValue == "YES") {
return true;
} else if (upperValue == "FALSE" || upperValue == "NO") {
return false;
}
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture,
"Invalid value \"{0}\" for key '{1}'.", value, key));
}
#endregion // Methods
public event OracleInfoMessageEventHandler InfoMessage;
public override DataTable GetSchema ()
{
if (State != ConnectionState.Open)
throw new InvalidOperationException ("Invalid operation. The connection is closed.");
return GetSchemaMetaDataCollections ();
}
public override DataTable GetSchema (String collectionName)
{
return GetSchema (collectionName, null);
}
public override DataTable GetSchema (String collectionName, string [] restrictionValues)
{
if (State != ConnectionState.Open)
throw new InvalidOperationException ("Invalid operation. The connection is closed.");
int restrictionsCount = 0;
if (restrictionValues != null)
restrictionsCount = restrictionValues.Length;
DataTable metaTable = GetSchemaMetaDataCollections ();
foreach (DataRow row in metaTable.Rows) {
if (String.Compare (row ["CollectionName"].ToString (), collectionName, true) == 0) {
int restrictions = (int)row ["NumberOfRestrictions"];
if (restrictionsCount > restrictions)
throw new ArgumentException ("More restrictions were provided than needed.");
}
}
switch (collectionName.ToUpper ()) {
case "METADATACOLLECTIONS":
return metaTable;
case "DATASOURCEINFORMATION":
return GetSchemaDataSourceInformation ();
case "DATATYPES":
return GetSchemaDataTypes ();
case "RESTRICTIONS":
return GetSchemaRestrictions ();
case "RESERVEDWORDS":
return GetSchemaReservedWords ();
case "USERS":
return GetSchemaUsers (restrictionValues);
case "TABLES":
return GetSchemaTables (restrictionValues);
case "COLUMNS":
return GetSchemaColumns (restrictionValues);
case "VIEWS":
return GetSchemaViews (restrictionValues);
case "SYNONYMS":
return GetSchemaSynonyms (restrictionValues);
case "SEQUENCES":
return GetSchemaSequences (restrictionValues);
case "FUNCTIONS":
return GetSchemaProcedures (restrictionValues, "FUNCTION");
case "PACKAGES":
return GetSchemaProcedures (restrictionValues, "PACKAGE");
case "PACKAGEBODIES":
return GetSchemaProcedures (restrictionValues, "PACKAGE BODY");
case "PROCEDURES":
return GetSchemaProcedures (restrictionValues, "PROCEDURE");
case "PROCEDUREPARAMETERS":
throw new NotImplementedException (collectionName); // see ALL_ARGUMENTS
case "ARGUMENTS":
throw new NotImplementedException (collectionName); // see ALL_ARGUMENTS
case "INDEXCOLUMNS":
throw new NotImplementedException (collectionName); // see ALL_IND_COLS
case "INDEXES":
throw new NotImplementedException (collectionName); // see ALL_INDEXES
case "UNIQUEKEYS":
throw new NotImplementedException (collectionName); // see ALL_CONSTRAINTS and CONSTRAINT_TYPE of U
case "PRIMARYKEYS":
throw new NotImplementedException (collectionName); // see ALL_CONSTRAINTS and CONSTRAINT_TYPE of P
case "FOREIGNKEYS":
throw new NotImplementedException (collectionName); // see ALL_CONSTRAINTS and CONSTRAINT_TYPE of R
case "FOREIGNKEYCOLUMNS":
throw new NotImplementedException (collectionName); // see ALL_CONS_COLUMNS
}
throw new ArgumentException ("The requested collection is not defined.");
}
static DataTable metaDataCollections = null;
DataTable GetSchemaMetaDataCollections ()
{
if (metaDataCollections != null)
return metaDataCollections;
DataTable dt = new DataTable ();
dt.Columns.Add ("CollectionName", typeof(System.String));
dt.Columns.Add ("NumberOfRestrictions", typeof(System.Int32));
dt.Columns.Add ("NumberOfIdentifierParts", typeof(System.Int32));
dt.LoadDataRow (new object [] { "MetaDataCollections", 0, 0 }, true);
dt.LoadDataRow (new object [] { "DataSourceInformation", 0, 0 }, true);
dt.LoadDataRow (new object [] { "DataTypes", 0, 0 }, true);
dt.LoadDataRow (new object [] { "Restrictions", 0, 0 }, true);
dt.LoadDataRow (new object [] { "ReservedWords", 0, 0 }, true);
dt.LoadDataRow (new object [] { "Users", 1, 1 }, true);
dt.LoadDataRow (new object [] { "Tables", 2, 2 }, true);
dt.LoadDataRow (new object [] { "Columns", 3, 3 }, true);
dt.LoadDataRow (new object [] { "Views", 2, 2 }, true);
dt.LoadDataRow (new object [] { "Synonyms", 2, 2 }, true);
dt.LoadDataRow (new object [] { "Sequences", 2, 2 }, true);
dt.LoadDataRow (new object [] { "ProcedureParameters", 2, 2 }, true);
dt.LoadDataRow (new object [] { "Functions", 2, 2 }, true);
dt.LoadDataRow (new object [] { "IndexColumns", 5, 3 }, true);
dt.LoadDataRow (new object [] { "Indexes", 4, 2 }, true);
dt.LoadDataRow (new object [] { "Packages", 2, 2 }, true);
dt.LoadDataRow (new object [] { "PackageBodies", 2, 2 }, true);
dt.LoadDataRow (new object [] { "Arguments", 4, 4 }, true);
dt.LoadDataRow (new object [] { "Procedures", 2, 2 }, true);
dt.LoadDataRow (new object [] { "UniqueKeys", 3, 3 }, true);
dt.LoadDataRow (new object [] { "PrimaryKeys", 3, 3 }, true);
dt.LoadDataRow (new object [] { "ForeignKeys", 3, 3 }, true);
dt.LoadDataRow (new object [] { "ForeignKeyColumns", 3, 2 }, true);
return dt;
}
DataTable GetSchemaRestrictions ()
{
DataTable dt = new DataTable ();
dt.Columns.Add ("CollectionName", typeof (System.String));
dt.Columns.Add ("RestrictionName", typeof (System.String));
dt.Columns.Add ("ParameterName", typeof (System.String));
dt.Columns.Add ("RestrictionDefault", typeof (System.String));
dt.Columns.Add ("RestrictionNumber", typeof (System.Int32));
dt.LoadDataRow (new object [] { "Users", "UserName", "NAME", "USERNAME", 1 }, true);
dt.LoadDataRow (new object [] { "Tables", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Tables", "Table", "TABLENAME", "TABLE_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "Columns", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Columns", "Table", "TABLENAME", "TABLE_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "Columns", "Column", "COLUMNNAME", "COLUMN_NAME", 3 }, true);
dt.LoadDataRow (new object [] { "Views", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Views", "View", "VIEWNAME", "VIEW_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "Synonyms", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Synonyms", "Synonym", "SYNONYMNAME", "SYNONYM_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "Sequences", "Owner", "OWNER", "SEQUENCE_OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Sequences", "Sequence", "SEQUENCE", "SEQUENCE_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "ProcedureParameters", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "ProcedureParameters", "ObjectName", "OBJECTNAME", "OBJECT_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "Functions", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Functions", "Name", "NAME", "OBJECT_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "IndexColumns", "Owner", "OWNER", "INDEX_OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "IndexColumns", "Name", "NAME", "INDEX_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "IndexColumns", "TableOwner", "TABLEOWNER", "TABLE_OWNER", 3 }, true);
dt.LoadDataRow (new object [] { "IndexColumns", "TableName", "TABLENAME", "TABLE_NAME", 4 }, true);
dt.LoadDataRow (new object [] { "IndexColumns", "Column", "COLUMNNAME", "COLUMN_NAME", 5 }, true);
dt.LoadDataRow (new object [] { "Indexes", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Indexes", "Name", "NAME", "INDEX_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "Indexes", "TableOwner", "TABLEOWNER", "TABLE_OWNER", 3 }, true);
dt.LoadDataRow (new object [] { "Indexes", "TableName", "TABLENAME", "TABLE_NAME", 4 }, true);
dt.LoadDataRow (new object [] { "Packages", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Packages", "Name", "PACKAGENAME", "OBJECT_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "PackageBodies", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "PackageBodies", "Name", "NAME", "OBJECT_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "Arguments", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Arguments", "PackageName", "PACKAGENAME", "PACKAGE_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "Arguments", "ObjectName", "OBJECTNAME", "OBJECT_NAME", 3 }, true);
dt.LoadDataRow (new object [] { "Arguments", "ArgumentName", "ARGUMENTNAME", "ARGUMENT_NAME", 4 }, true);
dt.LoadDataRow (new object [] { "Procedures", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "Procedures", "Name", "NAME", "OBJECT_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "UniqueKeys", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "UniqueKeys", "Table_Name", "TABLENAME", "TABLE_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "UniqueKeys", "Constraint_Name", "CONSTRAINTNAME", "CONSTRAINT_NAME", 3 }, true);
dt.LoadDataRow (new object [] { "PrimaryKeys", "Owner", "OWNER", "OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "PrimaryKeys", "Table_Name", "TABLENAME", "TABLE_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "PrimaryKeys", "Constraint_Name", "CONSTRAINTNAME", "CONSTRAINT_NAME", 3 }, true);
dt.LoadDataRow (new object [] { "ForeignKeys", "Foreign_Key_Owner", "OWNER", "FKCON.OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "ForeignKeys", "Foreign_Key_Table_Name", "TABLENAME", "FKCON.TABLE_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "ForeignKeys", "Foreign_Key_Constraint_Name", "CONSTRAINTNAME", "FKCON.CONSTRAINT_NAME", 3 }, true);
dt.LoadDataRow (new object [] { "ForeignKeyColumns", "Owner", "OWNER", "FKCOLS.OWNER", 1 }, true);
dt.LoadDataRow (new object [] { "ForeignKeyColumns", "Table_Name", "TABLENAME", "FKCOLS.TABLE_NAME", 2 }, true);
dt.LoadDataRow (new object [] { "ForeignKeyColumns", "Constraint_Name", "CONSTRAINTNAME", "FKCOLS.CONSTRAINT_NAME", 3 }, true);
return dt;
}
DataTable GetSchemaTables (string [] restrictionValues)
{
OracleCommand cmd = CreateCommand ();
// TODO: determine whether a table is a System or a User type
cmd.CommandText = "SELECT OWNER, TABLE_NAME, DECODE(OWNER, 'SYS', 'System', 'User') AS TYPE " +
" FROM SYS.ALL_TABLES " +
" WHERE (OWNER = :POWNER OR :POWNER IS NULL) " +
" AND (TABLE_NAME = :PTABLE_NAME OR :PTABLE_NAME IS NULL) " +
" ORDER BY OWNER, TABLE_NAME";
cmd.Parameters.Add (":POWNER", OracleType.VarChar, 30).Value = DBNull.Value;
cmd.Parameters.Add (":PTABLE_NAME", OracleType.VarChar, 30).Value = DBNull.Value;
return GetSchemaDataTable (cmd, restrictionValues);
}
DataTable GetSchemaColumns (string [] restrictionValues)
{
OracleCommand cmd = CreateCommand();
cmd.CommandText = "SELECT OWNER, TABLE_NAME, COLUMN_NAME, COLUMN_ID AS ID, DATA_TYPE AS DATATYPE, " +
" DATA_LENGTH AS LENGTH, DATA_PRECISION AS PRECISION, DATA_SCALE AS SCALE, NULLABLE " +
" FROM SYS.ALL_TAB_COLUMNS " +
" WHERE (OWNER = :POWNER OR :POWNER IS NULL) " +
" AND (TABLE_NAME = :PTABLE_NAME OR :PTABLE_NAME IS NULL) " +
" AND (COLUMN_NAME = 'ENAME' OR :PCOLUMN_NAME IS NULL) " +
" ORDER BY OWNER, TABLE_NAME, COLUMN_ID;";
cmd.Parameters.Add (":POWNER", OracleType.VarChar, 30).Value = DBNull.Value;
cmd.Parameters.Add (":PTABLE_NAME", OracleType.VarChar, 30).Value = DBNull.Value;
cmd.Parameters.Add (":PCOLUMN_NAME", OracleType.VarChar, 30).Value = DBNull.Value;
return GetSchemaDataTable (cmd, restrictionValues);
}
DataTable GetSchemaViews (string [] restrictionValues)
{
OracleCommand cmd = CreateCommand ();
cmd.CommandText = "SELECT OWNER,VIEW_NAME,TEXT_LENGTH,TEXT,TYPE_TEXT_LENGTH,TYPE_TEXT,OID_TEXT_LENGTH,OID_TEXT, " +
" VIEW_TYPE_OWNER,VIEW_TYPE,SUPERVIEW_NAME " +
" FROM SYS.ALL_VIEWS " +
" WHERE (OWNER = :POWNER OR :POWNER IS NULL) " +
" AND (VIEW_NAME = :PVIEW_NAME OR :PVIEW_NAME IS NULL) " +
" ORDER BY OWNER, VIEW_NAME";
cmd.Parameters.Add (":POWNER", OracleType.VarChar, 30).Value = DBNull.Value;
cmd.Parameters.Add (":PVIEW_NAME", OracleType.VarChar, 30).Value = DBNull.Value;
return GetSchemaDataTable (cmd, restrictionValues);
}
DataTable GetSchemaUsers (string [] restrictionValues)
{
OracleCommand cmd = CreateCommand ();
cmd.CommandText = "SELECT USERNAME AS NAME, USER_ID AS ID, CREATED AS CREATEDATE " +
" FROM SYS.ALL_USERS " +
" WHERE (USERNAME = :PUSERNAME OR :PUSERNAME IS NULL)";
cmd.Parameters.Add (":PUSERNAME", OracleType.VarChar, 30).Value = DBNull.Value;
return GetSchemaDataTable (cmd, restrictionValues);
}
DataTable GetSchemaSynonyms (string [] restrictionValues)
{
OracleCommand cmd = CreateCommand ();
cmd.CommandText = "SELECT OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME, DB_LINK " +
" FROM SYS.ALL_SYNONYMS " +
" WHERE (OWNER = :POWNER OR :POWNER IS NULL) " +
" AND (SYNONYM_NAME = :PSYNONYM_NAME OR :PSYNONYM_NAME IS NULL) " +
" ORDER BY OWNER, SYNONYM_NAME";
cmd.Parameters.Add (":POWNER", OracleType.VarChar, 30).Value = DBNull.Value;
cmd.Parameters.Add (":PSYNONYM_NAME", OracleType.VarChar, 30).Value = DBNull.Value;
return GetSchemaDataTable (cmd, restrictionValues);
}
DataTable GetSchemaSequences (string [] restrictionValues)
{
OracleCommand cmd = CreateCommand ();
cmd.CommandText = "SELECT SEQUENCE_OWNER, SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, " +
" INCREMENT_BY, CYCLE_FLAG, ORDER_FLAG, CACHE_SIZE, LAST_NUMBER " +
" FROM SYS.ALL_SEQUENCES " +
" WHERE (SEQUENCE_OWNER = :PSEQUENCE_OWNER OR :PSEQUENCE_OWNER IS NULL) " +
" AND (SEQUENCE_NAME = :PSEQUENCE_NAME OR :PSEQUENCE_NAME IS NULL) " +
" ORDER BY SEQUENCE_OWNER, SEQUENCE_NAME";
cmd.Parameters.Add (":SEQUENCE_OWNER", OracleType.VarChar, 30).Value = DBNull.Value;
cmd.Parameters.Add (":SEQUENCE_NAME", OracleType.VarChar, 30).Value = DBNull.Value;
return GetSchemaDataTable (cmd, restrictionValues);
}
DataTable GetSchemaProcedures(string [] restrictionValues, string objType)
{
OracleCommand cmd = CreateCommand ();
cmd.CommandText = "SSELECT OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, LAST_DDL_TIME, " +
" TIMESTAMP, STATUS, TEMPORARY, GENERATED, SECONDARY, CREATED " +
" FROM ALL_OBJECTS " +
" WHERE OBJECT_TYPE = '" + objType + "' " +
" AND (OWNER = :POWNER OR :POWNER IS NULL) " +
" AND (OBJECT_NAME = :POBJECT_NAME OR :POBJECT_NAME IS NULL) " +
" ORDER BY OWNER, OBJECT_NAME, SUBOBJECT_NAME";
cmd.Parameters.Add (":POWNER", OracleType.VarChar, 30).Value = DBNull.Value;
cmd.Parameters.Add (":POBJECT_NAME", OracleType.VarChar, 30).Value = DBNull.Value;
return GetSchemaDataTable (cmd, restrictionValues);
}
DataTable GetSchemaDataSourceInformation ()
{
DataTable dt = new DataTable ();
dt.Columns.Add ("CompositeIdentifierSeparatorPattern", typeof (System.String));
dt.Columns.Add ("DataSourceProductName", typeof (System.String));
dt.Columns.Add ("DataSourceProductVersion", typeof (System.String));
dt.Columns.Add ("DataSourceProductVersionNormalized", typeof (System.String));
dt.Columns.Add ("GroupByBehavior", typeof (System.Data.Common.GroupByBehavior));
dt.Columns.Add ("IdentifierPattern", typeof (System.String));
dt.Columns.Add ("IdentifierCase", typeof (System.Data.Common.IdentifierCase));
dt.Columns.Add ("OrderByColumnsInSelect", typeof (System.Boolean));
dt.Columns.Add ("ParameterMarkerFormat", typeof (System.String));
dt.Columns.Add ("ParameterMarkerPattern", typeof (System.String));
dt.Columns.Add ("ParameterNameMaxLength", typeof (System.Int32));
dt.Columns.Add ("ParameterNamePattern", typeof (System.String));
dt.Columns.Add ("QuotedIdentifierPattern", typeof (System.String));
dt.Columns.Add ("QuotedIdentifierCase", typeof (System.Data.Common.IdentifierCase));
dt.Columns.Add ("StatementSeparatorPattern", typeof (System.String));
dt.Columns.Add ("StringLiteralPattern", typeof (System.String));
dt.Columns.Add ("SupportedJoinOperators", typeof (System.Data.Common.SupportedJoinOperators));
string ver = ServerVersion;
string [] ver2 = ver.Substring (0, ver.IndexOf (' ')).Split (new char [] { '.' });
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ver2.Length; i++) {
if (i > 0) {
sb.Append (".");
}
sb.AppendFormat ("{0:00}", Int32.Parse (ver2 [i]));
}
sb.Append (' ');
ver = sb.ToString ();
dt.LoadDataRow (new object [] { "@|\\.",
"Oracle",
ServerVersion,
ver,
3,
"^[\\p{Lo}\\p{Lu}\\p{Ll}\\p{Lm}__#$][\\p{Lo}\\p{Lu}\\p{Ll}\\p{Lm}\\p{Nd}__#$]*$",
1,
false,
":{0}",
":([\\p{Lo}\\p{Lu}\\p{Ll}\\p{Lm}__#$][\\p{Lo}\\p{Lu}\\p{Ll}\\p{Lm}\\p{Nd}__#$]*)",
30,
"^[\\p{Lo}\\p{Lu}\\p{Ll}\\p{Lm}__#$][\\p{Lo}\\p{Lu}\\p{Ll}\\p{Lm}\\p{Nd}__#$]*$",
"\"^(([^\"]|\"\")*)$\"",
2,
DBNull.Value,
"'(([^']|'')*)'", 15 },
true);
return dt;
}
DataTable GetSchemaDataTypes ()
{
DataTable dt = new DataTable ();
dt.Columns.Add ("TypeName", typeof (System.String));
dt.Columns.Add ("ProviderDbType", typeof (System.Int32));
dt.Columns.Add ("ColumnSize", typeof (System.Int64));
dt.Columns.Add ("CreateFormat", typeof (System.String));
dt.Columns.Add ("CreateParameters", typeof (System.String));
dt.Columns.Add ("DataType", typeof (System.String));
dt.Columns.Add ("IsAutoIncrementable", typeof (System.Boolean));
dt.Columns.Add ("IsBestMatch", typeof (System.Boolean));
dt.Columns.Add ("IsCaseSensitive", typeof (System.Boolean));
dt.Columns.Add ("IsFixedLength", typeof (System.Boolean));
dt.Columns.Add ("IsFixedPrecisionScale", typeof (System.Boolean));
dt.Columns.Add ("IsLong", typeof (System.Boolean));
dt.Columns.Add ("IsNullable", typeof (System.Boolean));
dt.Columns.Add ("IsSearchable", typeof (System.Boolean));
dt.Columns.Add ("IsSearchableWithLike", typeof (System.Boolean));
dt.Columns.Add ("IsUnsigned", typeof (System.Boolean));
dt.Columns.Add ("MaximumScale", typeof (System.Int16));
dt.Columns.Add ("MinimumScale", typeof (System.Int16));
dt.Columns.Add ("IsConcurrencyType", typeof (System.Boolean));
dt.Columns.Add ("IsLiteralSupported", typeof (System.Boolean));
dt.Columns.Add ("LiteralPrefix", typeof (System.String));
dt.Columns.Add ("LiteralSuffix", typeof (System.String));
dt.LoadDataRow (new object [] { "BFILE", 1, 4294967296, "BFILE", DBNull.Value, "System.Byte[]", false, false, false, false, false, true, true, false, false, DBNull.Value, DBNull.Value, DBNull.Value, false, false, DBNull.Value, DBNull.Value }, true);
dt.LoadDataRow (new object [] { "BLOB", 2, 4294967296, "BLOB", DBNull.Value, "System.Byte[]", false, false, false, false, false, true, true, false, false, DBNull.Value, DBNull.Value, DBNull.Value, false, false, DBNull.Value, DBNull.Value }, true);
dt.LoadDataRow (new object [] { "CHAR", 3, 2000, "CHAR({0})", "size", "System.String", false, false, true, true, false, false, true, true, true, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "'", "'" }, true);
dt.LoadDataRow (new object [] { "CLOB", 4, 4294967296, "CLOB", DBNull.Value, "System.String", false, true, true, false, false, false, true, false, false, DBNull.Value, DBNull.Value, DBNull.Value, false, false, DBNull.Value, DBNull.Value }, true);
dt.LoadDataRow (new object [] { "DATE", 6, 19, "DATE", DBNull.Value, "System.DateTime", false, true, false, true, false, false, true, true, true, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "TO_DATE('", "','YYYY-MM-DD HH24:MI:SS')" }, true);
dt.LoadDataRow (new object [] { "FLOAT", 29, 38, "FLOAT", DBNull.Value, "System.Decimal", false, true, false, true, false, false, true, true, true, false, DBNull.Value, DBNull.Value, false, true, DBNull.Value, DBNull.Value }, true);
dt.LoadDataRow (new object [] { "INTERVAL DAY TO SECOND", 7, 0, "INTERVAL DAY({0}) TO SECOND({1})", "dayprecision,secondsprecision", "System.TimeSpan", false, true, false, true, false, false, true, true, false, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "TO_DSINTERVAL('", "')" }, true);
dt.LoadDataRow (new object [] { "INTERVAL YEAR TO MONTH", 8, 0, "INTERVAL YEAR({0}) TO MONTH", "yearprecision", "System.Int32", false, false, false, true, false, false, true, true, false, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "TO_YMINTERVAL('", "')" }, true);
dt.LoadDataRow (new object [] { "LONG", 10, 2147483647, "LONG", DBNull.Value, "System.String", false, false, false, false, false, true, true, false, false, DBNull.Value, DBNull.Value, DBNull.Value, false, false, DBNull.Value, DBNull.Value }, true);
dt.LoadDataRow (new object [] { "LONG RAW", 9, 2147483647, "LONG RAW", DBNull.Value, "System.Byte[]", false, false, false, false, false, true, true, false, false, DBNull.Value, DBNull.Value, DBNull.Value, false, false, DBNull.Value, DBNull.Value }, true);
dt.LoadDataRow (new object [] { "NCHAR", 11, 2000, "NCHAR({0})", "size", "System.String", false, false, true, true, false, false, true, true, true, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "N'", "'" }, true);
dt.LoadDataRow (new object [] { "NCLOB", 12, 4294967296, "NCLOB", DBNull.Value, "System.String", false, false, true, false, false, true, true, false, false, DBNull.Value, DBNull.Value, DBNull.Value, false, false, DBNull.Value, DBNull.Value }, true);
dt.LoadDataRow (new object [] { "NUMBER", 13, 38, "NUMBER ({0},{1})", "precision,scale", "System.Decimal", false, true, false, true, false, false, true, true, true, false, 127, -84, false, true, "", "" }, true);
dt.LoadDataRow (new object [] { "NVARCHAR2", 14, 4000, "NVARCHAR2({0})", "size", "System.String", false, false, true, false, false, false, true, true, false, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "N'", "'" }, true);
dt.LoadDataRow (new object [] { "RAW", 15, 2000, "RAW({0})", "size", "System.Byte[]", false, true, false, false, true, false, true, true, true, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "HEXTORAW('", "')" }, true);
dt.LoadDataRow (new object [] { "ROWID", 16, 3950, "ROWID", DBNull.Value, "System.String", true, false, false, false, false, false, false, true, false, DBNull.Value, DBNull.Value, DBNull.Value, false, false, DBNull.Value, DBNull.Value }, true);
dt.LoadDataRow (new object [] { "TIMESTAMP", 18, 27, "TIMESTAMP({0})", "precision of fractional seconds", "System.DateTime", false, false, false, true, false, false, true, true, false, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "TO_TIMESTAMP('", "','YYYY-MM-DD HH24:MI:SS.FF')" }, true);
dt.LoadDataRow (new object [] { "TIMESTAMP WITH LOCAL TIME ZONE", 19, 27, "TIMESTAMP({0} WITH LOCAL TIME ZONE)", "precision of fractional seconds", "System.DateTime", false, false, false, true, false, false, true, true, false, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "TO_TIMESTAMP_TZ('", "','YYYY-MM-DD HH24:MI:SS.FF')" }, true);
dt.LoadDataRow (new object [] { "TIMESTAMP WITH TIME ZONE", 20, 34, "TIMESTAMP({0} WITH TIME ZONE)", "precision of fractional seconds", "System.DateTime", false, false, false, true, false, false, true, true, false, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "TO_TIMESTAMP_TZ('", "','YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')" }, true);
dt.LoadDataRow (new object [] { "VARCHAR2", 22, 4000, "VARCHAR2({0})", "size", "System.String", false, false, true, false, true, false, true, true, true, DBNull.Value, DBNull.Value, DBNull.Value, false, true, "'", "'" }, true);
return dt;
}
DataTable GetSchemaReservedWords ()
{
DataTable dt = new DataTable ();
dt.Columns.Add ("ReservedWord", typeof (System.String));
dt.LoadDataRow (new object [] { "ACCESS" }, true);
dt.LoadDataRow (new object [] { "ADD" }, true);
dt.LoadDataRow (new object [] { "ALL" }, true);
dt.LoadDataRow (new object [] { "ALTER" }, true);
dt.LoadDataRow (new object [] { "AND" }, true);
dt.LoadDataRow (new object [] { "ANY" }, true);
dt.LoadDataRow (new object [] { "AS" }, true);
dt.LoadDataRow (new object [] { "ASC" }, true);
dt.LoadDataRow (new object [] { "AUDIT" }, true);
dt.LoadDataRow (new object [] { "BETWEEN" }, true);
dt.LoadDataRow (new object [] { "BY" }, true);
dt.LoadDataRow (new object [] { "CHAR" }, true);
dt.LoadDataRow (new object [] { "CHECK" }, true);
dt.LoadDataRow (new object [] { "CLUSTER" }, true);
dt.LoadDataRow (new object [] { "COLUMN" }, true);
dt.LoadDataRow (new object [] { "COMMENT" }, true);
dt.LoadDataRow (new object [] { "COMPRESS" }, true);
dt.LoadDataRow (new object [] { "CONNECT" }, true);
dt.LoadDataRow (new object [] { "CREATE" }, true);
dt.LoadDataRow (new object [] { "CURRENT" }, true);
dt.LoadDataRow (new object [] { "DATE" }, true);
dt.LoadDataRow (new object [] { "DECIMAL" }, true);
dt.LoadDataRow (new object [] { "DEFAULT" }, true);
dt.LoadDataRow (new object [] { "DELETE" }, true);
dt.LoadDataRow (new object [] { "DESC" }, true);
dt.LoadDataRow (new object [] { "DISTINCT" }, true);
dt.LoadDataRow (new object [] { "DROP" }, true);
dt.LoadDataRow (new object [] { "ELSE" }, true);
dt.LoadDataRow (new object [] { "EXCLUSIVE" }, true);
dt.LoadDataRow (new object [] { "EXISTS" }, true);
dt.LoadDataRow (new object [] { "FILE" }, true);
dt.LoadDataRow (new object [] { "FLOAT" }, true);
dt.LoadDataRow (new object [] { "FOR" }, true);
dt.LoadDataRow (new object [] { "FROM" }, true);
dt.LoadDataRow (new object [] { "GRANT" }, true);
dt.LoadDataRow (new object [] { "GROUP" }, true);
dt.LoadDataRow (new object [] { "HAVING" }, true);
dt.LoadDataRow (new object [] { "IDENTIFIED" }, true);
dt.LoadDataRow (new object [] { "IMMEDIATE" }, true);
dt.LoadDataRow (new object [] { "IN" }, true);
dt.LoadDataRow (new object [] { "INCREMENT" }, true);
dt.LoadDataRow (new object [] { "INDEX" }, true);
dt.LoadDataRow (new object [] { "INITAL" }, true);
dt.LoadDataRow (new object [] { "INSERT" }, true);
dt.LoadDataRow (new object [] { "INTEGER" }, true);
dt.LoadDataRow (new object [] { "INTERSECT" }, true);
dt.LoadDataRow (new object [] { "INTO" }, true);
dt.LoadDataRow (new object [] { "IS" }, true);
dt.LoadDataRow (new object [] { "LEVEL" }, true);
dt.LoadDataRow (new object [] { "LIKE" }, true);
dt.LoadDataRow (new object [] { "LOCK" }, true);
dt.LoadDataRow (new object [] { "LONG" }, true);
dt.LoadDataRow (new object [] { "MAXEXTENTS" }, true);
dt.LoadDataRow (new object [] { "MINUS" }, true);
dt.LoadDataRow (new object [] { "MLSLABEL" }, true);
dt.LoadDataRow (new object [] { "MODE" }, true);
dt.LoadDataRow (new object [] { "MODIFY" }, true);
dt.LoadDataRow (new object [] { "NOAUDIT" }, true);
dt.LoadDataRow (new object [] { "NOCOMPRESS" }, true);
dt.LoadDataRow (new object [] { "NOT" }, true);
dt.LoadDataRow (new object [] { "NOWAIT" }, true);
dt.LoadDataRow (new object [] { "NULL" }, true);
dt.LoadDataRow (new object [] { "NUMBER" }, true);
dt.LoadDataRow (new object [] { "OF" }, true);
dt.LoadDataRow (new object [] { "OFFLINE" }, true);
dt.LoadDataRow (new object [] { "ON" }, true);
dt.LoadDataRow (new object [] { "ONLINE" }, true);
dt.LoadDataRow (new object [] { "OPTION" }, true);
dt.LoadDataRow (new object [] { "OR" }, true);
dt.LoadDataRow (new object [] { "ORDER" }, true);
dt.LoadDataRow (new object [] { "PCTFREE" }, true);
dt.LoadDataRow (new object [] { "PRIOR" }, true);
dt.LoadDataRow (new object [] { "PRIVILEGES" }, true);
dt.LoadDataRow (new object [] { "PUBLIC" }, true);
dt.LoadDataRow (new object [] { "RAW" }, true);
dt.LoadDataRow (new object [] { "RENAME" }, true);
dt.LoadDataRow (new object [] { "RESOURCE" }, true);
dt.LoadDataRow (new object [] { "REVOKE" }, true);
dt.LoadDataRow (new object [] { "ROW" }, true);
dt.LoadDataRow (new object [] { "ROWID" }, true);
dt.LoadDataRow (new object [] { "ROWNUM" }, true);
dt.LoadDataRow (new object [] { "ROWS" }, true);
dt.LoadDataRow (new object [] { "SELECT" }, true);
dt.LoadDataRow (new object [] { "SESSION" }, true);
dt.LoadDataRow (new object [] { "SET" }, true);
dt.LoadDataRow (new object [] { "SHARE" }, true);
dt.LoadDataRow (new object [] { "SIZE" }, true);
dt.LoadDataRow (new object [] { "SMALLINT" }, true);
dt.LoadDataRow (new object [] { "START" }, true);
dt.LoadDataRow (new object [] { "SUCCESSFUL" }, true);
dt.LoadDataRow (new object [] { "SYNONYM" }, true);
dt.LoadDataRow (new object [] { "SYSDATE" }, true);
dt.LoadDataRow (new object [] { "TABLE" }, true);
dt.LoadDataRow (new object [] { "THEN" }, true);
dt.LoadDataRow (new object [] { "TO" }, true);
dt.LoadDataRow (new object [] { "TRIGGER" }, true);
dt.LoadDataRow (new object [] { "UID" }, true);
dt.LoadDataRow (new object [] { "UNION" }, true);
dt.LoadDataRow (new object [] { "UNIQUE" }, true);
dt.LoadDataRow (new object [] { "UPDATE" }, true);
dt.LoadDataRow (new object [] { "USER" }, true);
dt.LoadDataRow (new object [] { "VALIDATE" }, true);
dt.LoadDataRow (new object [] { "VALUES" }, true);
dt.LoadDataRow (new object [] { "VARCHAR" }, true);
dt.LoadDataRow (new object [] { "VARCHAR2" }, true);
dt.LoadDataRow (new object [] { "VIEW" }, true);
dt.LoadDataRow (new object [] { "WHENEVER" }, true);
dt.LoadDataRow (new object [] { "WHERE" }, true);
dt.LoadDataRow (new object [] { "WITH" }, true);
return dt;
}
DataTable GetSchemaDataTable (OracleCommand cmd, string [] restrictionValues)
{
if (restrictionValues != null) {
for (int i = 0; i < restrictionValues.Length; i++)
cmd.Parameters [i].Value = restrictionValues [i];
}
OracleDataAdapter adapter = new OracleDataAdapter (cmd);
DataTable dt = new DataTable ();
adapter.Fill (dt);
return dt;
}
}
}