MySql.Data.MySqlClient.SchemaProvider.GetIndexColumns C# (CSharp) Method

GetIndexColumns() public method

public GetIndexColumns ( string restrictions ) : DataTable
restrictions string
return System.Data.DataTable
        public virtual DataTable GetIndexColumns(string[] restrictions)
        {
            DataTable dt = new DataTable("IndexColumns");
            dt.Columns.Add("INDEX_CATALOG", typeof (string));
            dt.Columns.Add("INDEX_SCHEMA", typeof (string));
            dt.Columns.Add("INDEX_NAME", typeof (string));
            dt.Columns.Add("TABLE_NAME", typeof (string));
            dt.Columns.Add("COLUMN_NAME", typeof (string));
            dt.Columns.Add("ORDINAL_POSITION", typeof (int));
            dt.Columns.Add("SORT_ORDER", typeof(string));

            int max = restrictions == null ? 4 : restrictions.Length;
            string[] tableRestrictions = new string[Math.Max(max, 4)];
            if (restrictions != null)
                restrictions.CopyTo(tableRestrictions, 0);
            tableRestrictions[3] = "BASE TABLE";
            DataTable tables = GetTables(tableRestrictions);

            foreach (DataRow table in tables.Rows)
            {
                string sql = String.Format("SHOW INDEX FROM `{0}`.`{1}`",
                                           table["TABLE_SCHEMA"], table["TABLE_NAME"]);
                MySqlCommand cmd = new MySqlCommand(sql, connection);
                using (MySqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        string key_name = GetString(reader, reader.GetOrdinal("KEY_NAME"));
                        string col_name = GetString(reader, reader.GetOrdinal("COLUMN_NAME"));

                        if (restrictions != null)
                        {
                            if (restrictions.Length >= 4 && restrictions[3] != null &&
                                key_name != restrictions[3]) continue;
                            if (restrictions.Length >= 5 && restrictions[4] != null &&
                                col_name != restrictions[4]) continue;
                        }
                        DataRow row = dt.NewRow();
                        row["INDEX_CATALOG"] = null;
                        row["INDEX_SCHEMA"] = table["TABLE_SCHEMA"];
                        row["INDEX_NAME"] = key_name;
                        row["TABLE_NAME"] = GetString(reader, reader.GetOrdinal("TABLE"));
                        row["COLUMN_NAME"] = col_name;
                        row["ORDINAL_POSITION"] = reader.GetValue(reader.GetOrdinal("SEQ_IN_INDEX"));
                        row["SORT_ORDER"] = reader.GetString("COLLATION");
                        dt.Rows.Add(row);
                    }
                }
            }

            return dt;
        }