public static async Task <ClauseFieldType> GetType(ISchemaRetriever schemaRetriever, string fieldName)
        {
            Ensure.IsNotNull(schemaRetriever, nameof(schemaRetriever), "schemaRetriever cannot be null.");

            Ensure.IsNotNullOrEmpty(fieldName, nameof(fieldName));

            var dic = await schemaRetriever.RetrieveTableSchema();

            // if we failed to get this field type, treat as Unknown
            if (dic.Contains(fieldName) == false)
            {
                return(ClauseFieldType.Unknown);
            }

            var fieldType = dic[fieldName];

            switch (fieldType)
            {
            case "integer":
            case "long":
            case "float":
            case "double":
                return(ClauseFieldType.Numeric);

            case "string":
                return(ClauseFieldType.Text);

            case "date":
                return(ClauseFieldType.Date);

            default:
                return(ClauseFieldType.Unknown);
            }
        }
Esempio n. 2
0
        private void tvSchemas_AfterExpand(object sender, TreeViewEventArgs e)
        {
            e.Node.Nodes.Clear();
            var serverInfo          = e.Node.Tag as ServerInfo;
            ISchemaRetriever server = SchemaRetrieverFactory.GetSchemaRetriever(serverInfo);

            foreach (var schema in server.GetSchemas(serverInfo))
            {
                e.Node.Nodes.Add(new TreeNode(schema, 1, 1));
            }
        }
Esempio n. 3
0
 private void lvTables_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (tvSchemas.SelectedNode != null && tvSchemas.SelectedNode.Parent != null && lvTables.SelectedItems.Count == 1)
     {
         lvColumns.Items.Clear();
         var serverInfo          = tvSchemas.SelectedNode.Parent.Tag as ServerInfo;
         var schema              = tvSchemas.SelectedNode.Text;
         ISchemaRetriever server = SchemaRetrieverFactory.GetSchemaRetriever(serverInfo);
         if (lvTables.SelectedItems.Count == 1)
         {
             var tableInfo = lvTables.SelectedItems[0].Tag as TableInfo;
             tableInfo.Columns = server.GetColumns(serverInfo, tableInfo, schema);
             foreach (var columnInfo in tableInfo.Columns)
             {
                 var item = lvColumns.Items.Add(columnInfo.ColumnName);
                 item.SubItems.Add(columnInfo.DataType.Name);
                 item.SubItems.Add(columnInfo.Size.ToString());
                 //if(columnInfo.Precision.HasValue)
                 item.SubItems.Add(columnInfo.Precision.ToString());
                 //if(columnInfo.Scale.HasValue)
                 item.SubItems.Add(columnInfo.Scale.ToString());
                 item.Tag = columnInfo;
                 if (columnInfo.IsKey)
                 {
                     if (tableInfo.Keys.Any(k => k.ColumnName.Equals(columnInfo.ColumnName, StringComparison.InvariantCultureIgnoreCase) && k.KeyType == KeyConstraintTypes.Primary))
                     {
                         var constraint = tableInfo.Keys.First(k => k.ColumnName.Equals(columnInfo.ColumnName, StringComparison.InvariantCultureIgnoreCase) && k.KeyType == KeyConstraintTypes.Primary);
                         item.SubItems.Add(constraint.ConstraintName);
                     }
                     item.ImageIndex = 3;
                 }
                 else if (columnInfo.IsForeignKey)
                 {
                     item.ImageIndex = 4;
                     if (tableInfo.Keys.Any(k => k.ColumnName.Equals(columnInfo.ColumnName, StringComparison.InvariantCultureIgnoreCase) && k.KeyType == KeyConstraintTypes.Foreign))
                     {
                         var constraint = tableInfo.Keys.First(k => k.ColumnName.Equals(columnInfo.ColumnName, StringComparison.InvariantCultureIgnoreCase) && k.KeyType == KeyConstraintTypes.Foreign);
                         item.SubItems.Add(constraint.ConstraintName);
                     }
                 }
                 else if (columnInfo.IsUnique)
                 {
                     item.ImageIndex = 5;
                     if (tableInfo.Keys.Any(k => k.ColumnName.Equals(columnInfo.ColumnName, StringComparison.InvariantCultureIgnoreCase) && k.KeyType == KeyConstraintTypes.Unique))
                     {
                         var constraint = tableInfo.Keys.First(k => k.ColumnName.Equals(columnInfo.ColumnName, StringComparison.InvariantCultureIgnoreCase) && k.KeyType == KeyConstraintTypes.Unique);
                         item.SubItems.Add(constraint.ConstraintName);
                     }
                 }
             }
         }
     }
 }
Esempio n. 4
0
 private void tvSchemas_AfterSelect(object sender, TreeViewEventArgs e)
 {
     if (e.Node.Parent != null)
     {
         lvTables.Items.Clear();
         lvColumns.Items.Clear();
         var serverInfo          = e.Node.Parent.Tag as ServerInfo;
         ISchemaRetriever server = SchemaRetrieverFactory.GetSchemaRetriever(serverInfo);
         foreach (var table in server.GetTables(serverInfo, e.Node.Text))
         {
             var item = lvTables.Items.Add(table.TableName, String.Format("{0}.{1}", table.Owner, table.TableName), 2);
             item.Tag = table;
         }
     }
 }
Esempio n. 5
0
        /// <inheritdoc/>
        public void Visit(ElasticSearchDSL elasticSearchDSL)
        {
            Ensure.IsNotNull(elasticSearchDSL, nameof(elasticSearchDSL));

            // Preparing the schema with the index name to be used later
            schemaRetriever = schemaRetrieverFactory.Make(elasticSearchDSL.IndexName);

            // base query
            elasticSearchDSL.Query.Accept(this);

            var queryStringBuilder = new StringBuilder();

            var(databaseName, tableName) = KustoDatabaseTableNames.FromElasticIndexName(elasticSearchDSL.IndexName, defaultDatabaseName);

            // when an index-pattern doesn't have a default time filter the query element can be empty
            var translatedQueryExpression = !string.IsNullOrEmpty(elasticSearchDSL.Query.KustoQL) ? $"| {elasticSearchDSL.Query.KustoQL}" : string.Empty;

            // Aggregations
            if (elasticSearchDSL.Query.Bool != null)
            {
                queryStringBuilder.Append($"{KustoQLOperators.Let} _data = database(\"{databaseName}\").{tableName} {translatedQueryExpression};");

                // Aggregations
                if (elasticSearchDSL.Aggregations?.Count > 0)
                {
                    queryStringBuilder.Append('\n').Append($"(_data | {KustoQLOperators.Summarize} ");

                    foreach (var(_, aggregation) in elasticSearchDSL.Aggregations)
                    {
                        aggregation.Accept(this);
                        queryStringBuilder.Append($"{aggregation.KustoQL} ");
                    }

                    queryStringBuilder.Append("| as aggs);");
                }

                // hits (projections...)
                // The size is deserialized property
                // therefore we check 'Size >= 0' to protect the query.
                if (elasticSearchDSL.Size >= 0)
                {
                    queryStringBuilder.Append("\n(_data ");

                    if (elasticSearchDSL.Size > 0)
                    {
                        // we only need to sort if we're returning hits
                        var orderingList = new List <string>();

                        foreach (var sortClause in elasticSearchDSL.Sort)
                        {
                            sortClause.Accept(this);
                            if (!string.IsNullOrEmpty(sortClause.KustoQL))
                            {
                                orderingList.Add(sortClause.KustoQL);
                            }
                        }

                        if (orderingList.Count > 0)
                        {
                            queryStringBuilder.Append($"| {KustoQLOperators.OrderBy} {string.Join(", ", orderingList)} ");
                        }
                    }

                    queryStringBuilder.Append($"| {KustoQLOperators.Limit} {elasticSearchDSL.Size} | as hits)");
                }
            }
            else
            {
                // ViewSingleDocument query
                queryStringBuilder.Append($"database(\"{databaseName}\").{tableName} {translatedQueryExpression} | as hits;");
            }

            elasticSearchDSL.KustoQL = queryStringBuilder.ToString();
        }
Esempio n. 6
0
        private void GetTableColumns()
        {
            ISchemaRetriever schema = SchemaRetrieverFactory.GetSchemaRetriever(_server);

            _table.Columns = schema.GetColumns(_server, _table);
        }
Esempio n. 7
0
        private void LoadActiveSqlServers()
        {
            ISchemaRetriever server = SchemaRetrieverFactory.GetSchemaRetriever(ServerTypes.SqlServer);

            LoadServers(server.GetServers().ToList());
        }