Exemple #1
0
        /// <summary>
        /// Reads table with Database Objects which satisfy given restriction. Base implementation
        /// uses direct SQL query to the INFORMATION_SCHEMA.
        /// </summary>
        /// <param name="connection">The DataConnectionWrapper to be used for enumeration.</param>
        /// <param name="restrictions">The restrictions to be putted on the retrieved objects set.</param>
        /// <param name="sort">Sort expresion to append after ORDER BY clause.</param>
        /// <returns>Returns table with Database Objects which satisfy given restriction.</returns>
        protected override DataTable ReadTable(DataConnectionWrapper connection, object[] restrictions, string sort)
        {
            if (connection == null)
            {
                throw new ArgumentNullException("connection");
            }

            // Extract server version
            Version serverVersion = connection.ServerVersion;

            // For latest version just return base result
            if (serverVersion == null || serverVersion.Major >= 5)
            {
                return(base.ReadTable(connection, restrictions, sort));
            }


            // Temporary table to store result
            DataTable merged = new DataTable();

            // Enumerate all tables
            DataTable tables = TableDescriptor.Enumerate(connection, restrictions);

            // If there is now tables, return empty table with columns
            if (tables == null || tables.Rows == null || tables.Rows.Count <= 0)
            {
                return(merged);
            }

            // Calculate column restrriction
            object column = restrictions != null && restrictions.Length >= 4 ? restrictions[3] : null;

            // Enumerate columns for each table
            foreach (DataRow tableRow in tables.Rows)
            {
                // Enumerate columns
                DataTable columns = ReadColumnsForTable(
                    connection,
                    new object[] {
                    null,
                    DataInterpreter.GetString(tableRow, TableDescriptor.Attributes.Schema),
                    DataInterpreter.GetString(tableRow, TableDescriptor.Attributes.Name),
                    column
                },
                    sort);

                // Merge results if any
                if (columns != null)
                {
                    merged.Merge(columns);
                }
            }

            // Return results
            return(merged);
        }
Exemple #2
0
        /// <summary>
        /// Reads table with Database Objects which satisfy given restriction. Uses table enumeration for legacy
        /// version.
        /// </summary>
        /// <param name="connection">The DataConnectionWrapper to be used for enumeration.</param>
        /// <param name="restrictions">The restrictions to be putted on the retrieved objects set.</param>
        /// <param name="sort">Sort expresion to append after ORDER BY clause.</param>
        /// <returns>Returns table with Database Objects which satisfy given restriction.</returns>
        protected override DataTable ReadTable(DataConnectionWrapper connection, object[] restrictions, string sort)
        {
            if (connection == null)
            {
                throw new ArgumentNullException("connection");
            }

            // Extract server version
            Version serverVersion = connection.ServerVersion;

            // For latest version just return base result
            if (serverVersion == null || serverVersion.Major >= 5)
            {
                return(base.ReadTable(connection, restrictions, sort));
            }
            ;

            // For legacy version enumerate tables
            DataTable result = TableDescriptor.Enumerate(connection, restrictions);

            // If result is empty, return it
            if (result == null)
            {
                return(null);
            }

            // Add is updatable column
            result.Columns.Add(Attributes.IsUpdatable, typeof(string));

            // Set is updatable to true for each row
            foreach (DataRow table in result.Rows)
            {
                DataInterpreter.SetValueIfChanged(table, Attributes.IsUpdatable, DataInterpreter.True);
            }

            // Finaly, return result
            return(result);
        }