Beispiel #1
0
        private bool TryGenerateJsonRowSet(DbTableClause table)
        {
            var model     = table.Model;
            var jsonParam = model.GetSourceJsonParam();

            if (jsonParam is null)
            {
                return(false);
            }

            SqlBuilder.Append("OPENJSON(");
            jsonParam.DbExpression.Accept(_expressionGenerator);
            SqlBuilder.AppendLine(") WITH (");
            SqlBuilder.IndentLevel++;
            var columns = model.GetColumns();

            for (int i = 0; i < columns.Count; i++)
            {
                var column     = columns[i];
                var columnName = column.DbColumnName.ToQuotedIdentifier();
                SqlBuilder.Append(columnName).Append(' ').Append(column.GetSqlType().GetDataTypeSql(SqlVersion));
                if (i < columns.Count - 1)
                {
                    SqlBuilder.Append(',').AppendLine();
                }
            }
            var alias = ModelAliasManager[model].ToQuotedIdentifier();

            SqlBuilder.Append(") AS ").Append(alias);
            SqlBuilder.IndentLevel--;
            return(true);
        }
Beispiel #2
0
        public override void Visit(DbTableClause table)
        {
            if (TryGenerateJsonRowSet(table))
            {
                return;
            }

            var model = table.Model;

            if (model is SqlXmlNode xmlModel)
            {
                xmlModel.SourceData.Accept(_expressionGenerator);
                SqlBuilder.Append(".nodes(").AppendSingleQuoted(xmlModel.XPath).Append(')');
                var alias = ModelAliasManager[model].ToQuotedIdentifier();
                SqlBuilder.Append(' ').Append(alias).Append('(').Append(nameof(SqlXmlNode.Xml).ToQuotedIdentifier()).Append(')');
            }
            else
            {
                var tableName = table.Name.ToQuotedIdentifier();
                var alias     = ModelAliasManager[model].ToQuotedIdentifier();
                SqlBuilder.Append(tableName);
                if (alias != tableName)
                {
                    SqlBuilder.Append(' ').Append(alias);
                }
            }
        }
Beispiel #3
0
        public override void Visit(DbTableClause table)
        {
            if (TryGenerateJsonTable(table))
            {
                return;
            }

            var model     = table.Model;
            var tableName = table.Name.ToQuotedIdentifier();
            var alias     = ModelAliasManager[model].ToQuotedIdentifier();

            SqlBuilder.Append(tableName);
            if (alias != tableName)
            {
                SqlBuilder.Append(' ').Append(alias);
            }
        }
Beispiel #4
0
        private bool TryGenerateJsonTable(DbTableClause table)
        {
            var model     = table.Model;
            var jsonParam = model.GetSourceJsonParam();

            if (ReferenceEquals(jsonParam, null))
            {
                return(false);
            }

            SqlBuilder.Append("JSON_TABLE(");
            jsonParam.DbExpression.Accept(_expressionGenerator);
            SqlBuilder.AppendLine(", '$[*]' COLUMNS (");
            SqlBuilder.IndentLevel++;
            var columns = model.GetColumns();

            for (int i = 0; i < columns.Count; i++)
            {
                var column     = columns[i];
                var columnName = column.DbColumnName.ToQuotedIdentifier();
                var mySqlType  = column.GetMySqlType();
                SqlBuilder.Append(columnName).Append(' ').Append(mySqlType.GetDataTypeSql(MySqlVersion));
                if (!mySqlType.IsJsonOrdinalityType)
                {
                    SqlBuilder.Append(" PATH ").Append(("$." + column.Name).ToLiteral());
                }
                if (i < columns.Count - 1)
                {
                    SqlBuilder.Append(',').AppendLine();
                }
            }
            var alias = ModelAliasManager[model].ToQuotedIdentifier();

            SqlBuilder.Append(")) AS ").Append(alias);
            SqlBuilder.IndentLevel--;
            return(true);
        }
Beispiel #5
0
 public override void Visit(DbTableClause table)
 {
     SourceModelSet = SourceModelSet.Add(table.Model);
 }
Beispiel #6
0
 public override void Visit(DbTableClause table)
 {
     AddAliase(table.Model);
 }
Beispiel #7
0
 /// <summary>
 /// Visits the <see cref="DbTableClause"/>.
 /// </summary>
 /// <param name="table">The table clause.</param>
 /// <returns>The result.</returns>
 public abstract T Visit(DbTableClause table);
 /// <summary>
 /// Visits the <see cref="DbTableClause"/>.
 /// </summary>
 /// <param name="table">The table clause.</param>
 public abstract void Visit(DbTableClause table);