* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / FirebirdSql.Data.Firebird / FirebirdSql.Data.Firebird / DbSchema / FbProcedureParameters.cs
index 415a976b1978722fa0499556552e5d91d410ee36..0f4dd88dbf60f681aa29c2b1236710c15b14358c 100644 (file)
-/*\r
- *     Firebird ADO.NET Data provider for .NET and     Mono \r
- * \r
- *        The contents of this file are subject to the Initial \r
- *        Developer's Public License Version 1.0 (the "License"); \r
- *        you may not use this file except in compliance with the \r
- *        License. You may obtain a copy of the License at \r
- *        http://www.firebirdsql.org/index.php?op=doc&id=idpl\r
- *\r
- *        Software distributed under the License is distributed on \r
- *        an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either \r
- *        express or implied. See the License for the specific \r
- *        language governing rights and limitations under the License.\r
- * \r
- *     Copyright (c) 2002, 2005 Carlos Guzman Alvarez\r
- *     All Rights Reserved.\r
- */\r
-\r
-using System;\r
-using System.Data;\r
-using System.Globalization;\r
-using System.Text;\r
-\r
-using FirebirdSql.Data.Common;\r
-\r
-namespace FirebirdSql.Data.Firebird.DbSchema\r
-{\r
-       internal class FbProcedureParameters : FbDbSchema\r
-       {\r
-               #region Constructors\r
-\r
-               public FbProcedureParameters() : base("ProcedureParameters")\r
-               {\r
-               }\r
-\r
-               #endregion\r
-\r
-               #region Protected Methods\r
-\r
-               protected override StringBuilder GetCommandText(object[] restrictions)\r
-               {\r
-                       StringBuilder sql = new StringBuilder();\r
-                       StringBuilder where = new StringBuilder();\r
-\r
-                       sql.Append(\r
-                               @"SELECT " +\r
-                                       "null AS PROCEDURE_CATALOG, " +\r
-                                       "null AS PROCEDURE_SCHEMA, " +\r
-                                       "pp.rdb$procedure_name AS PROCEDURE_NAME, " +\r
-                                       "pp.rdb$parameter_name AS PARAMETER_NAME, " +\r
-                                       "null AS PARAMETER_DATA_TYPE, " +\r
-                                       "fld.rdb$field_sub_type AS PARAMETER_SUB_TYPE, " +\r
-                                       "pp.rdb$parameter_number AS ORDINAL_POSITION, " +\r
-                                       "cast(pp.rdb$parameter_type AS integer) AS PARAMETER_DIRECTION, " +\r
-                                       "cast(fld.rdb$field_length AS integer) AS PARAMETER_SIZE, " +\r
-                                       "cast(fld.rdb$field_precision AS integer) AS NUMERIC_PRECISION, " +\r
-                                       "cast(fld.rdb$field_scale AS integer) AS NUMERIC_SCALE, " +\r
-                                       "cast(fld.rdb$character_length AS integer) AS CHARACTER_LENGTH, " +\r
-                                       "cast(fld.rdb$field_length AS integer) AS CHARACTER_OCTET_LENGTH, " +\r
-                                       "null AS CHARACTER_SET_CATALOG, " +\r
-                                       "null AS CHARACTER_SET_SCHEMA, " +\r
-                                       "cs.rdb$character_set_name AS CHARACTER_SET_NAME, " +\r
-                                       "null AS COLLATION_CATALOG, " +\r
-                                       "null AS COLLATION_SCHEMA, " +\r
-                                       "coll.rdb$collation_name AS COLLATION_NAME, " +\r
-                                       "null AS COLLATION_CATALOG, " +\r
-                                       "null AS COLLATION_SCHEMA, " +\r
-                                       "pp.rdb$description AS DESCRIPTION, " +\r
-                                       "fld.rdb$field_type AS FIELD_TYPE " +\r
-                               "FROM " +\r
-                                       "rdb$procedure_parameters pp " +\r
-                                       "left join rdb$fields fld ON pp.rdb$field_source = fld.rdb$field_name " +\r
-                                       "left join rdb$character_sets cs ON cs.rdb$character_set_id = fld.rdb$character_set_id " +\r
-                                       "left join rdb$collations coll ON (coll.rdb$collation_id = fld.rdb$collation_id AND coll.rdb$character_set_id = fld.rdb$character_set_id) ");\r
-\r
-                       if (restrictions != null)\r
-                       {\r
-                               int index = 0;\r
-\r
-                               /* PROCEDURE_CATALOG */\r
-                               if (restrictions.Length >= 1 && restrictions[0] != null)\r
-                               {\r
-                               }\r
-\r
-                               /* PROCEDURE_SCHEMA     */\r
-                               if (restrictions.Length >= 2 && restrictions[1] != null)\r
-                               {\r
-                               }\r
-\r
-                               /* PROCEDURE_NAME */\r
-                               if (restrictions.Length >= 3 && restrictions[2] != null)\r
-                               {\r
-                                       where.AppendFormat(CultureInfo.CurrentCulture, "pp.rdb$procedure_name = @p{0}", index++);\r
-                               }\r
-\r
-                               /* PROCEDURE_PARAMETER */\r
-                               if (restrictions.Length >= 4 && restrictions[3] != null)\r
-                               {\r
-                                       if (where.Length > 0)\r
-                                       {\r
-                                               where.Append(" AND ");\r
-                                       }\r
-\r
-                                       where.AppendFormat(CultureInfo.CurrentCulture, "pp.rdb$parameter_name = @p{0}", index++);\r
-                               }\r
-                       }\r
-\r
-                       if (where.Length > 0)\r
-                       {\r
-                               sql.AppendFormat(CultureInfo.CurrentCulture, " WHERE {0} ", where.ToString());\r
-                       }\r
-\r
-                       sql.Append(" ORDER BY pp.rdb$procedure_name, pp.rdb$parameter_type, pp.rdb$parameter_number");\r
-\r
-                       return sql;\r
-               }\r
-\r
-               protected override DataTable ProcessResult(DataTable schema)\r
-               {\r
-                       schema.BeginLoadData();\r
-\r
-                       foreach (DataRow row in schema.Rows)\r
-                       {\r
-                               int blrType = Convert.ToInt32(row["FIELD_TYPE"], CultureInfo.InvariantCulture);\r
-\r
-                               int subType = 0;\r
-                               if (row["PARAMETER_SUB_TYPE"] != System.DBNull.Value)\r
-                               {\r
-                                       subType = Convert.ToInt32(row["PARAMETER_SUB_TYPE"], CultureInfo.InvariantCulture);\r
-                               }\r
-\r
-                               int scale = 0;\r
-                               if (row["NUMERIC_SCALE"] != System.DBNull.Value)\r
-                               {\r
-                                       scale = Convert.ToInt32(row["NUMERIC_SCALE"], CultureInfo.InvariantCulture);\r
-                               }\r
-\r
-                               FbDbType dbType = (FbDbType)TypeHelper.GetDbDataType(blrType, subType, scale);\r
-                               row["PARAMETER_DATA_TYPE"] = TypeHelper.GetDataTypeName((DbDataType)dbType).ToLower(CultureInfo.CurrentCulture);\r
-\r
-                               if (dbType == FbDbType.Char || dbType == FbDbType.VarChar)\r
-                               {\r
-                                       row["PARAMETER_SIZE"] = row["CHARACTER_LENGTH"];\r
-                               }\r
-                               else\r
-                               {\r
-                                       row["CHARACTER_OCTET_LENGTH"] = 0;\r
-                               }\r
-\r
-                               if (dbType == FbDbType.Binary || dbType == FbDbType.Text)\r
-                               {\r
-                                       row["PARAMETER_SIZE"] = Int32.MaxValue;\r
-                               }\r
-\r
-                               if (row["NUMERIC_PRECISION"] == System.DBNull.Value &&\r
-                                  (dbType == FbDbType.Decimal || dbType == FbDbType.Numeric))\r
-                               {\r
-                                       row["NUMERIC_PRECISION"] = row["PARAMETER_SIZE"];\r
-                               }\r
-\r
-                               row["NUMERIC_SCALE"] = (-1) * scale;\r
-\r
-                               int direction = Convert.ToInt32(row["PARAMETER_DIRECTION"], CultureInfo.InvariantCulture);\r
-                               switch (direction)\r
-                               {\r
-                                       case 0:\r
-                                               row["PARAMETER_DIRECTION"] = ParameterDirection.Input;\r
-                                               break;\r
-\r
-                                       case 1:\r
-                                               row["PARAMETER_DIRECTION"] = ParameterDirection.Output;\r
-                                               break;\r
-                               }\r
-                       }\r
-\r
-                       schema.EndLoadData();\r
-                       schema.AcceptChanges();\r
-\r
-                       // Remove not more needed columns\r
-                       schema.Columns.Remove("FIELD_TYPE");\r
-                       schema.Columns.Remove("CHARACTER_LENGTH");\r
-\r
-                       return schema;\r
-               }\r
-\r
-               #endregion\r
-       }\r
+/*
+ *     Firebird ADO.NET Data provider for .NET and Mono 
+ * 
+ *        The contents of this file are subject to the Initial 
+ *        Developer's Public License Version 1.0 (the "License"); 
+ *        you may not use this file except in compliance with the 
+ *        License. You may obtain a copy of the License at 
+ *        http://www.firebirdsql.org/index.php?op=doc&id=idpl
+ *
+ *        Software distributed under the License is distributed on 
+ *        an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either 
+ *        express or implied. See the License for the specific 
+ *        language governing rights and limitations under the License.
+ * 
+ *     Copyright (c) 2002, 2005 Carlos Guzman Alvarez
+ *     All Rights Reserved.
+ */
+
+using System;
+using System.Data;
+using System.Globalization;
+using System.Text;
+
+using FirebirdSql.Data.Common;
+
+namespace FirebirdSql.Data.Firebird.DbSchema
+{
+       internal class FbProcedureParameters : FbDbSchema
+       {
+               #region Constructors
+
+               public FbProcedureParameters() : base("ProcedureParameters")
+               {
+               }
+
+               #endregion
+
+               #region Protected Methods
+
+               protected override StringBuilder GetCommandText(object[] restrictions)
+               {
+                       StringBuilder sql = new StringBuilder();
+                       StringBuilder where = new StringBuilder();
+
+                       sql.Append(
+                               @"SELECT " +
+                                       "null AS PROCEDURE_CATALOG, " +
+                                       "null AS PROCEDURE_SCHEMA, " +
+                                       "pp.rdb$procedure_name AS PROCEDURE_NAME, " +
+                                       "pp.rdb$parameter_name AS PARAMETER_NAME, " +
+                                       "null AS PARAMETER_DATA_TYPE, " +
+                                       "fld.rdb$field_sub_type AS PARAMETER_SUB_TYPE, " +
+                                       "pp.rdb$parameter_number AS ORDINAL_POSITION, " +
+                                       "cast(pp.rdb$parameter_type AS integer) AS PARAMETER_DIRECTION, " +
+                                       "cast(fld.rdb$field_length AS integer) AS PARAMETER_SIZE, " +
+                                       "cast(fld.rdb$field_precision AS integer) AS NUMERIC_PRECISION, " +
+                                       "cast(fld.rdb$field_scale AS integer) AS NUMERIC_SCALE, " +
+                    "cast(fld.rdb$character_length AS integer) AS \"CHARACTER_LENGTH\", " +
+                                       "cast(fld.rdb$field_length AS integer) AS CHARACTER_OCTET_LENGTH, " +
+                                       "null AS CHARACTER_SET_CATALOG, " +
+                                       "null AS CHARACTER_SET_SCHEMA, " +
+                                       "cs.rdb$character_set_name AS CHARACTER_SET_NAME, " +
+                                       "null AS COLLATION_CATALOG, " +
+                                       "null AS COLLATION_SCHEMA, " +
+                                       "coll.rdb$collation_name AS COLLATION_NAME, " +
+                                       "null AS COLLATION_CATALOG, " +
+                                       "null AS COLLATION_SCHEMA, " +
+                                       "pp.rdb$description AS DESCRIPTION, " +
+                                       "fld.rdb$field_type AS FIELD_TYPE " +
+                               "FROM " +
+                                       "rdb$procedure_parameters pp " +
+                                       "left join rdb$fields fld ON pp.rdb$field_source = fld.rdb$field_name " +
+                                       "left join rdb$character_sets cs ON cs.rdb$character_set_id = fld.rdb$character_set_id " +
+                                       "left join rdb$collations coll ON (coll.rdb$collation_id = fld.rdb$collation_id AND coll.rdb$character_set_id = fld.rdb$character_set_id) ");
+
+                       if (restrictions != null)
+                       {
+                               int index = 0;
+
+                               /* PROCEDURE_CATALOG */
+                               if (restrictions.Length >= 1 && restrictions[0] != null)
+                               {
+                               }
+
+                               /* PROCEDURE_SCHEMA     */
+                               if (restrictions.Length >= 2 && restrictions[1] != null)
+                               {
+                               }
+
+                               /* PROCEDURE_NAME */
+                               if (restrictions.Length >= 3 && restrictions[2] != null)
+                               {
+                                       where.AppendFormat(CultureInfo.CurrentCulture, "pp.rdb$procedure_name = @p{0}", index++);
+                               }
+
+                               /* PROCEDURE_PARAMETER */
+                               if (restrictions.Length >= 4 && restrictions[3] != null)
+                               {
+                                       if (where.Length > 0)
+                                       {
+                                               where.Append(" AND ");
+                                       }
+
+                                       where.AppendFormat(CultureInfo.CurrentCulture, "pp.rdb$parameter_name = @p{0}", index++);
+                               }
+                       }
+
+                       if (where.Length > 0)
+                       {
+                               sql.AppendFormat(CultureInfo.CurrentCulture, " WHERE {0} ", where.ToString());
+                       }
+
+                       sql.Append(" ORDER BY pp.rdb$procedure_name, pp.rdb$parameter_type, pp.rdb$parameter_number");
+
+                       return sql;
+               }
+
+               protected override DataTable ProcessResult(DataTable schema)
+               {
+                       schema.BeginLoadData();
+
+                       foreach (DataRow row in schema.Rows)
+                       {
+                               int blrType = Convert.ToInt32(row["FIELD_TYPE"], CultureInfo.InvariantCulture);
+
+                               int subType = 0;
+                               if (row["PARAMETER_SUB_TYPE"] != System.DBNull.Value)
+                               {
+                                       subType = Convert.ToInt32(row["PARAMETER_SUB_TYPE"], CultureInfo.InvariantCulture);
+                               }
+
+                               int scale = 0;
+                               if (row["NUMERIC_SCALE"] != System.DBNull.Value)
+                               {
+                                       scale = Convert.ToInt32(row["NUMERIC_SCALE"], CultureInfo.InvariantCulture);
+                               }
+
+                               FbDbType dbType = (FbDbType)TypeHelper.GetDbDataType(blrType, subType, scale);
+                               row["PARAMETER_DATA_TYPE"] = TypeHelper.GetDataTypeName((DbDataType)dbType).ToLower(CultureInfo.CurrentCulture);
+
+                               if (dbType == FbDbType.Char || dbType == FbDbType.VarChar)
+                               {
+                                       row["PARAMETER_SIZE"] = row["CHARACTER_LENGTH"];
+                               }
+                               else
+                               {
+                                       row["CHARACTER_OCTET_LENGTH"] = 0;
+                               }
+
+                               if (dbType == FbDbType.Binary || dbType == FbDbType.Text)
+                               {
+                                       row["PARAMETER_SIZE"] = Int32.MaxValue;
+                               }
+
+                               if (row["NUMERIC_PRECISION"] == System.DBNull.Value &&
+                                  (dbType == FbDbType.Decimal || dbType == FbDbType.Numeric))
+                               {
+                                       row["NUMERIC_PRECISION"] = row["PARAMETER_SIZE"];
+                               }
+
+                               row["NUMERIC_SCALE"] = (-1) * scale;
+
+                               int direction = Convert.ToInt32(row["PARAMETER_DIRECTION"], CultureInfo.InvariantCulture);
+                               switch (direction)
+                               {
+                                       case 0:
+                                               row["PARAMETER_DIRECTION"] = ParameterDirection.Input;
+                                               break;
+
+                                       case 1:
+                                               row["PARAMETER_DIRECTION"] = ParameterDirection.Output;
+                                               break;
+                               }
+                       }
+
+                       schema.EndLoadData();
+                       schema.AcceptChanges();
+
+                       // Remove not more needed columns
+                       schema.Columns.Remove("FIELD_TYPE");
+                       schema.Columns.Remove("CHARACTER_LENGTH");
+
+                       return schema;
+               }
+
+               #endregion
+       }
 }
\ No newline at end of file