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); }
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); } } }
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); } }
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); }
public override void Visit(DbTableClause table) { SourceModelSet = SourceModelSet.Add(table.Model); }
public override void Visit(DbTableClause table) { AddAliase(table.Model); }
/// <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);