⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 databaseinformation.cs

📁 C#数据库中间层处理,支持主流数据库,如sql、oracle等
💻 CS
📖 第 1 页 / 共 2 页
字号:
/*
 * DatabaseInformation.cs
 *
 * Copyright (c) 2001, The HSQL Development Group
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * Neither the name of the HSQL Development Group nor the names of its
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This package is based on HypersonicSQL, originally developed by Thomas Mueller.
 *
 * C# port by Mark Tutt
 *
 */
namespace SharpHSQL
{
	using System;
	using System.Collections;
	using System.Text;

	/**
	 * DatabaseInformation class declaration
	 *
	 *
	 * @version 1.0.0.1
	 */
	class DatabaseInformation 
	{
		private Database	dDatabase;
		private Access		aAccess;
		private ArrayList   tTable;

		/**
		 * Constructor declaration
		 *
		 *
		 * @param db
		 * @param tables
		 * @param access
		 */
		public DatabaseInformation(Database db, ArrayList tables, Access access) 
		{
			dDatabase = db;
			tTable = tables;
			aAccess = access;
		}

		// some drivers use the following titles:
		// static string META_SCHEM="OWNER";
		// static string META_CAT="QUALIFIER";
		// static string META_COLUMN_SIZE="PRECISION";
		// static string META_BUFFER_LENGTH="LENGTH";
		// static string META_DECIMAL_DIGITS="SCALE";
		// static string META_NUM_PREC_RADIX="RADIX";
		// static string META_FIXED_PREC_SCALE="MONEY";
		// static string META_ORDINAL_POSITON="SEQ_IN_INDEX";
		// static string META_ASC_OR_DESC="COLLATION";
		static string META_SCHEM = "SCHEM";
		static string META_CAT = "CAT";
		static string META_COLUMN_SIZE = "COLUMN_SIZE";
		static string META_BUFFER_LENGTH = "BUFFER_LENGTH";
		static string META_DECIMAL_DIGITS = "DECIMAL_DIGITS";
		static string META_NUM_PREC_RADIX = "NUM_PREC_RADIX";
		static string META_FIXED_PREC_SCALE = "FIXED_PREC_SCALE";
		static string META_ORDINAL_POSITON = "ORDINAL_POSITON";
		static string META_ASC_OR_DESC = "ASC_OR_DESC";

		/**
		 * Method declaration
		 *
		 *
		 * @param name
		 * @param channel
		 *
		 * @return
		 *
		 * @throws Exception
		 */
		public Table getSystemTable(string name, Channel channel) 
		{
			if (name.Equals("SYSTEM_PROCEDURES")) 
			{
				Table t = createTable(name);

				t.addColumn("PROCEDURE_" + META_CAT, Column.VARCHAR);
				t.addColumn("PROCEDURE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("PROCEDURE_NAME", Column.VARCHAR);
				t.addColumn("NUM_INPUT_PARAMS", Column.INTEGER);
				t.addColumn("NUM_OUTPUT_PARAMS", Column.INTEGER);
				t.addColumn("NUM_RESULT_SETS", Column.INTEGER);
				t.addColumn("REMARKS", Column.VARCHAR);
				t.addColumn("PROCEDURE_TYPE", Column.SMALLINT);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_PROCEDURECOLUMNS")) 
			{
				Table t = createTable(name);

				t.addColumn("PROCEDURE_" + META_CAT, Column.VARCHAR);
				t.addColumn("PROCEDURE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("PROCEDURE_NAME", Column.VARCHAR);
				t.addColumn("COLUMN_NAME", Column.VARCHAR);
				t.addColumn("COLUMN_TYPE", Column.SMALLINT);
				t.addColumn("DATA_TYPE", Column.SMALLINT);
				t.addColumn("TYPE_NAME", Column.VARCHAR);
				t.addColumn("PRECISION", Column.INTEGER);
				t.addColumn("LENGTH", Column.INTEGER);
				t.addColumn("SCALE", Column.SMALLINT);
				t.addColumn("RADIX", Column.SMALLINT);
				t.addColumn("NULLABLE", Column.SMALLINT);
				t.addColumn("REMARKS", Column.VARCHAR);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_TABLES")) 
			{
				Table t = createTable(name);

				t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("TABLE_NAME", Column.VARCHAR);
				t.addColumn("TABLE_TYPE", Column.VARCHAR);
				t.addColumn("REMARKS", Column.VARCHAR);
				t.createPrimaryKey();

				for (int i = 0; i < tTable.Count; i++) 
				{
					Table  table = (Table) tTable[i];
					object[] o = t.getNewRow();

					o[2] = table.getName();
					o[3] = "TABLE";

					t.insert(o, null);
				}

				return t;
			} 
			else if (name.Equals("SYSTEM_SCHEMAS")) 
			{
				Table t = createTable(name);

				t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_CATALOGS")) 
			{
				Table t = createTable(name);

				t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_TABLETYPES")) 
			{
				Table t = createTable(name);

				t.addColumn("TABLE_TYPE", Column.VARCHAR);
				t.createPrimaryKey();

				object[] o = t.getNewRow();

				o[0] = "TABLE";

				t.insert(o, null);

				return t;
			} 
			else if (name.Equals("SYSTEM_COLUMNS")) 
			{
				Table t = createTable(name);

				t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("TABLE_NAME", Column.VARCHAR);
				t.addColumn("COLUMN_NAME", Column.VARCHAR);
				t.addColumn("DATA_TYPE", Column.SMALLINT);
				t.addColumn("TYPE_NAME", Column.VARCHAR);
				t.addColumn(META_COLUMN_SIZE, Column.INTEGER);
				t.addColumn(META_BUFFER_LENGTH, Column.INTEGER);
				t.addColumn(META_DECIMAL_DIGITS, Column.INTEGER);
				t.addColumn(META_NUM_PREC_RADIX, Column.INTEGER);
				t.addColumn("NULLABLE", Column.INTEGER);
				t.addColumn("REMARKS", Column.VARCHAR);

				// Access and Intersolv do not return this fields
				t.addColumn("COLUMN_DEF", Column.VARCHAR);
				t.addColumn("SQL_DATA_TYPE", Column.VARCHAR);
				t.addColumn("SQL_DATETIME_SUB", Column.INTEGER);
				t.addColumn("CHAR_OCTET_LENGTH", Column.INTEGER);
				t.addColumn("ORDINAL_POSITION", Column.VARCHAR);
				t.addColumn("IS_NULLABLE", Column.VARCHAR);
				t.createPrimaryKey();

				for (int i = 0; i < tTable.Count; i++) 
				{
					Table table = (Table) tTable[i];
					int   columns = table.getColumnCount();

					for (int j = 0; j < columns; j++) 
					{
						object[] o = t.getNewRow();

						o[2] = table.getName();
						o[3] = table.getColumnName(j);
						o[4] = table.getColumnType(j);
						o[5] = Column.getType(table.getColumnType(j));

						int nullable;

						if (table.getColumnIsNullable(j)) 
						{
							nullable = true.ToInt32();
						} 
						else 
						{
							nullable = false.ToInt32();
						}

						o[10] = nullable;

						if (table.getIdentityColumn() == j) 
						{
							o[11] = "IDENTITY";
						}

						t.insert(o, null);
					}
				}

				return t;
			} 
			else if (name.Equals("SYSTEM_COLUMNPRIVILEGES")) 
			{
				Table t = createTable(name);

				t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("TABLE_NAME", Column.VARCHAR);
				t.addColumn("COLUMN_NAME", Column.VARCHAR);
				t.addColumn("GRANTOR", Column.VARCHAR);
				t.addColumn("GRANTEE", Column.VARCHAR);
				t.addColumn("PRIVILEGE", Column.VARCHAR);
				t.addColumn("IS_GRANTABLE", Column.VARCHAR);
				t.createPrimaryKey();

				/*
				 * // todo: get correct info
				 * for(int i=0;i<tTable.size();i++) {
				 * Table table=(Table)tTable.elementAt(i);
				 * int columns=table.getColumnCount();
				 * for(int j=0;j<columns;j++) {
				 * object o[]=t.getNewRow();
				 * o[2]=table.getName();
				 * o[3]=table.getColumnName(j);
				 * o[4]="sa";
				 * o[6]="FULL";
				 * o[7]="NO";
				 * t.insert(o,null);
				 * }
				 * }
				 */
				return t;
			} 
			else if (name.Equals("SYSTEM_TABLEPRIVILEGES")) 
			{
				Table t = createTable(name);

				t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("TABLE_NAME", Column.VARCHAR);
				t.addColumn("GRANTOR", Column.VARCHAR);
				t.addColumn("GRANTEE", Column.VARCHAR);
				t.addColumn("PRIVILEGE", Column.VARCHAR);
				t.addColumn("IS_GRANTABLE", Column.VARCHAR);
				t.createPrimaryKey();

				for (int i = 0; i < tTable.Count; i++) 
				{
					Table  table = (Table) tTable[i];
					object[] o = t.getNewRow();

					o[2] = table.getName();
					o[3] = "sa";
					o[5] = "FULL";

					t.insert(o, null);
				}

				return t;
			} 
			else if (name.Equals("SYSTEM_BESTROWIDENTIFIER")) 
			{
				Table t = createTable(name);

				t.addColumn("SCOPE", Column.SMALLINT);
				t.addColumn("COLUMN_NAME", Column.VARCHAR);
				t.addColumn("DATA_TYPE", Column.SMALLINT);
				t.addColumn("TYPE_NAME", Column.VARCHAR);
				t.addColumn(META_COLUMN_SIZE, Column.INTEGER);
				t.addColumn(META_BUFFER_LENGTH, Column.INTEGER);
				t.addColumn(META_DECIMAL_DIGITS, Column.SMALLINT);
				t.addColumn("PSEUDO_COLUMN", Column.SMALLINT);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_VERSIONCOLUMNS")) 
			{
				Table t = createTable(name);

				t.addColumn("SCOPE", Column.INTEGER);
				t.addColumn("COLUMN_NAME", Column.VARCHAR);
				t.addColumn("DATA_TYPE", Column.SMALLINT);
				t.addColumn("TYPE_NAME", Column.VARCHAR);
				t.addColumn(META_COLUMN_SIZE, Column.SMALLINT);
				t.addColumn(META_BUFFER_LENGTH, Column.INTEGER);
				t.addColumn(META_DECIMAL_DIGITS, Column.SMALLINT);
				t.addColumn("PSEUDO_COLUMN", Column.SMALLINT);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_PRIMARYKEYS")) 
			{
				Table t = createTable(name);

				t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("TABLE_NAME", Column.VARCHAR);
				t.addColumn("COLUMN_NAME", Column.VARCHAR);
				t.addColumn("KEY_SEQ", Column.SMALLINT);
				t.addColumn("PK_NAME", Column.VARCHAR);
				t.createPrimaryKey();

				for (int i = 0; i < tTable.Count; i++) 
				{
					Table table = (Table) tTable[i];
					Index index = table.getIndex("SYSTEM_PK");
					int[]   cols = index.getColumns();
					int   len = cols.Length;

					for (int j = 0; j < len; j++) 
					{
						object[] o = t.getNewRow();

						o[2] = table.getName();
						o[3] = table.getColumnName(cols[j]);
						o[4] = j + 1;
						o[5] = "SYSTEM_PK";

						t.insert(o, null);
					}
				}

				return t;
			} 
			else if (name.Equals("SYSTEM_IMPORTEDKEYS")) 
			{
				Table t = createTable(name);

				t.addColumn("PKTABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("PKTABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("PKTABLE_NAME", Column.VARCHAR);
				t.addColumn("PKCOLUMN_NAME", Column.VARCHAR);
				t.addColumn("FKTABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("FKTABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("FKTABLE_NAME", Column.VARCHAR);
				t.addColumn("FKCOLUMN_NAME", Column.VARCHAR);
				t.addColumn("KEY_SEQ", Column.SMALLINT);
				t.addColumn("UPDATE_RULE", Column.SMALLINT);
				t.addColumn("DELETE_RULE", Column.SMALLINT);
				t.addColumn("FK_NAME", Column.VARCHAR);
				t.addColumn("PK_NAME", Column.VARCHAR);
				t.addColumn("DEFERRABILITY", Column.SMALLINT);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_EXPORTEDKEYS")) 
			{
				Table t = createTable(name);

				t.addColumn("PKTABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("PKTABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("PKTABLE_NAME", Column.VARCHAR);
				t.addColumn("PKCOLUMN_NAME", Column.VARCHAR);
				t.addColumn("FKTABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("FKTABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("FKTABLE_NAME", Column.VARCHAR);
				t.addColumn("FKCOLUMN_NAME", Column.VARCHAR);
				t.addColumn("KEY_SEQ", Column.SMALLINT);
				t.addColumn("UPDATE_RULE", Column.SMALLINT);
				t.addColumn("DELETE_RULE", Column.SMALLINT);
				t.addColumn("FK_NAME", Column.VARCHAR);
				t.addColumn("PK_NAME", Column.VARCHAR);
				t.addColumn("DEFERRABILITY", Column.SMALLINT);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_CROSSREFERENCE")) 
			{
				Table t = createTable(name);

				t.addColumn("PKTABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("PKTABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("PKTABLE_NAME", Column.VARCHAR);
				t.addColumn("PKCOLUMN_NAME", Column.VARCHAR);
				t.addColumn("FKTABLE_" + META_CAT, Column.VARCHAR);
				t.addColumn("FKTABLE_" + META_SCHEM, Column.VARCHAR);
				t.addColumn("FKTABLE_NAME", Column.VARCHAR);
				t.addColumn("FKCOLUMN_NAME", Column.VARCHAR);
				t.addColumn("KEY_SEQ", Column.INTEGER);
				t.addColumn("UPDATE_RULE", Column.SMALLINT);
				t.addColumn("DELETE_RULE", Column.SMALLINT);
				t.addColumn("FK_NAME", Column.VARCHAR);
				t.addColumn("PK_NAME", Column.VARCHAR);
				t.addColumn("DEFERRABILITY", Column.SMALLINT);
				t.createPrimaryKey();

				return t;
			} 
			else if (name.Equals("SYSTEM_TYPEINFO")) 
			{
				Table t = createTable(name);

				t.addColumn("TYPE_NAME", Column.VARCHAR);
				t.addColumn("DATA_TYPE", Column.SMALLINT);
				t.addColumn("PRECISION", Column.INTEGER);
				t.addColumn("LITERAL_PREFIX", Column.VARCHAR);
				t.addColumn("LITERAL_SUFFIX", Column.VARCHAR);
				t.addColumn("CREATE_PARAMS", Column.VARCHAR);
				t.addColumn("NULLABLE", Column.SMALLINT);
				t.addColumn("CASE_SENSITIVE", Column.VARCHAR);
				t.addColumn("SEARCHABLE", Column.SMALLINT);
				t.addColumn("UNSIGNED_ATTRIBUTE", Column.BIT);
				t.addColumn(META_FIXED_PREC_SCALE, Column.BIT);
				t.addColumn("AUTO_INCREMENT", Column.BIT);
				t.addColumn("LOCAL_TYPE_NAME", Column.VARCHAR);
				t.addColumn("MINIMUM_SCALE", Column.SMALLINT);
				t.addColumn("MAXIMUM_SCALE", Column.SMALLINT);

				// this columns are not supported by Access and Intersolv
				t.addColumn("SQL_DATE_TYPE", Column.INTEGER);
				t.addColumn("SQL_DATETIME_SUB", Column.INTEGER);
				t.addColumn("NUM_PREC_RADIX", Column.INTEGER);
				t.createPrimaryKey();

				for (int i = 0; i < Column.TYPES.Length; i++) 
				{
					object[] o = t.getNewRow();
					int    type = Column.TYPES[i];

					o[0] = Column.getType(type);
					o[1] = type;
					o[2] = 0;		 // precision
					o[6] = true; // need Column to track nullable for this
					o[7] = true;	 // case sensitive
					o[8] = true;;
					o[9] = false;       // unsigned
					o[10] = (type == Column.NUMERIC	|| type == Column.DECIMAL);
					o[11] = (type == Column.INTEGER);
					o[12] = o[0];
					o[13] = 0;
					o[14] = 0;    // maximum scale
					o[15] = 0;
					o[16] = o[15];
					o[17] = 10;

					t.insert(o, null);
				}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -