private void query(Library.DatabaseObjects.Database database, int?topN = null) { if (database != null) { var args = new QueryEventArgs(); args.Database = database; if (topN != null) { var selectedItem = gridTables.SelectedRows[0].DataBoundItem as TableWorkspace; args.InitialTopN = topN; args.InitialTable = selectedItem.SourceTable.TableName; args.InitialSchema = selectedItem.SourceTable.Schema.SchemaName; } QueryDatabase(this, args); } }
private List <IntellisenseMatch> getFromsAndJoinsMatches(string text, DbConnection connection) { var matches = new List <IntellisenseMatch>(); var toCheck = text.Split(new string[] { " ", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < toCheck.Length - 1; i++) { if (toCheck[i].ToLower() == "from" || toCheck[i].ToLower() == "join" || toCheck[i].ToLower() == "update" || toCheck[i].ToLower() == "insert" || toCheck[i].ToLower() == "into") { var obj = toCheck[i + 1]; var parts = obj.Split('.'); Schema schema = null; Library.DatabaseObjects.Database db = null; if (parts.Length > 1) { db = _dataSource.Databases.FirstOrDefault(d => d.DatabaseName.ToLower() == stripSurroundingChars(parts[0].ToLower())); } if (db == null) { db = _dataSource.CurrentDatabase; } if (db != null) { if (db.Schemas == null) { _dataSource.PopulateSchemas(connection, db); } var noSchema = db.Schemas.Count == 1 && string.IsNullOrEmpty(db.Schemas[0].SchemaName); schema = db.Schemas[0]; if (!noSchema) { if (parts.Length > 2) { schema = db.Schemas.FirstOrDefault(s => s.SchemaName.ToLower() == (string.IsNullOrEmpty(parts[1]) ? db.DataSource.DefaultSchemaName : stripSurroundingChars(parts[1]))); } if (schema == null && parts.Length > 1) { schema = db.Schemas.FirstOrDefault(s => s.SchemaName.ToLower() == stripSurroundingChars(parts[0])); } if (schema == null) { schema = db.Schemas.FirstOrDefault(s => s.SchemaName.ToLower() == db.DataSource.DefaultSchemaName.ToLower()); } } if (!schema.Tables.Any()) { _dataSource.PopulateTables(connection, new Schema[] { schema }, false); } var table = schema.Tables.FirstOrDefault(t => t.TableName.ToLower() == stripSurroundingChars(parts.Last().ToLower())); if (table != null) { if (!table.Columns.Any()) { _dataSource.PopulateChildColumns(connection, table); } matches.AddRange(table.Columns.OrderBy(c => c.ColumnName).Select(c => new IntellisenseMatch(_dataSource.GetConvertedObjectName(c.ColumnName), $"{table.TableName}.{c.ColumnName}"))); } // if (!schema.Views.Any()) _dataSource.PopulateViews() var view = schema.Views.FirstOrDefault(s => s.ViewName.ToLower() == stripSurroundingChars(parts.Last().ToLower())); if (view != null) { if (!view.Columns.Any()) { _dataSource.PopulateChildColumns(connection, view); } matches.AddRange(view.Columns.OrderBy(c => c.ColumnName).Select(c => new IntellisenseMatch(_dataSource.GetConvertedObjectName(c.ColumnName), $"{view.ViewName}.{c.ColumnName}"))); } } } } return(matches); }