Exemplo n.º 1
0
 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);
     }
 }
Exemplo n.º 2
0
        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);
        }