/// <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); }
/// <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); }