public AdncQuerySqlGenerator( [NotNull] QuerySqlGeneratorDependencies dependencies, [NotNull] MySqlSqlExpressionFactory sqlExpressionFactory, [MaybeNull] IMySqlOptions options) : base(dependencies, sqlExpressionFactory, options) { ContextId = Guid.NewGuid(); }
private static SqlFunctionExpression SetSrid( SqlExpression geometry, int srid, MySqlSqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) => options.ServerVersion.Supports.SpatialSetSridFunction ? sqlExpressionFactory.NullableFunction( "ST_SRID", new[] { geometry, sqlExpressionFactory.Constant(srid) }, typeof(int)) : sqlExpressionFactory.NullableFunction( "ST_GeomFromWKB", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "ST_AsBinary", new[] { geometry }, typeof(byte[])), sqlExpressionFactory.Constant(srid) }, geometry.Type);
public MySqlArrayTranslator( [NotNull] MySqlSqlExpressionFactory sqlExpressionFactory, [NotNull] MySqlJsonPocoTranslator jsonPocoTranslator) { _sqlExpressionFactory = sqlExpressionFactory; _jsonPocoTranslator = jsonPocoTranslator; }
public MySqlStringComparisonMethodTranslator(ISqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) { _sqlExpressionFactory = (MySqlSqlExpressionFactory)sqlExpressionFactory; _options = options; _caseSensitiveComparisons = _sqlExpressionFactory.Constant( new[] { StringComparison.Ordinal, StringComparison.CurrentCulture, StringComparison.InvariantCulture }); }
public MySqlDbFunctionsExtensionsMethodTranslator( ISqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) { _sqlExpressionFactory = (MySqlSqlExpressionFactory)sqlExpressionFactory; _options = options; }
public ZackQuerySqlGeneratorFactory_MySQLPomelo(QuerySqlGeneratorDependencies dependencies, ISqlGenerationHelper sqlGenerationHelper, ISqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) { this._dependencies = dependencies; this._sqlGenerationHelper = sqlGenerationHelper; this._sqlExpressionFactory = (MySqlSqlExpressionFactory)sqlExpressionFactory; this._options = options; }
public AdncMySqlQuerySqlGeneratorFactory( [NotNull] QuerySqlGeneratorDependencies dependencies, ISqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) : base(dependencies, sqlExpressionFactory, options) { _dependencies = dependencies; _sqlExpressionFactory = (MySqlSqlExpressionFactory)sqlExpressionFactory; _options = options; }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public MySqlQuerySqlGenerator( [NotNull] QuerySqlGeneratorDependencies dependencies, [NotNull] MySqlSqlExpressionFactory sqlExpressionFactory, [CanBeNull] IMySqlOptions options) : base(dependencies) { _sqlExpressionFactory = sqlExpressionFactory; _options = options; }
public MySqlJsonDbFunctionsTranslator( [NotNull] MySqlSqlExpressionFactory sqlExpressionFactory, [NotNull] IRelationalTypeMappingSource typeMappingSource, IMySqlOptions options) { _sqlExpressionFactory = sqlExpressionFactory; _options = options; _stringTypeMapping = typeMappingSource.FindMapping(typeof(string)); }
public MySqlSpatialDbFunctionsExtensionsMethodTranslator( IRelationalTypeMappingSource typeMappingSource, MySqlSqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) { _sqlExpressionFactory = sqlExpressionFactory; _typeMappingSource = typeMappingSource; _options = options; }
public MySqlJsonMicrosoftDomTranslator( [NotNull] MySqlSqlExpressionFactory sqlExpressionFactory, [NotNull] IRelationalTypeMappingSource typeMappingSource, [NotNull] MySqlJsonPocoTranslator jsonPocoTranslator) { _sqlExpressionFactory = sqlExpressionFactory; _typeMappingSource = typeMappingSource; _jsonPocoTranslator = jsonPocoTranslator; }
public ShardingMySqlQuerySqlGeneratorFactory( QuerySqlGeneratorDependencies dependencies, ISqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) { this._dependencies = dependencies; this._sqlExpressionFactory = (MySqlSqlExpressionFactory)sqlExpressionFactory; this._options = options; }
public MySqlJsonPocoTranslator( [NotNull] IRelationalTypeMappingSource typeMappingSource, [NotNull] MySqlSqlExpressionFactory sqlExpressionFactory) { _typeMappingSource = typeMappingSource; _sqlExpressionFactory = sqlExpressionFactory; _unquotedStringTypeMapping = ((MySqlStringTypeMapping)_typeMappingSource.FindMapping(typeof(string))).Clone(true); _intTypeMapping = _typeMappingSource.FindMapping(typeof(int)); _boolTypeMapping = _typeMappingSource.FindMapping(typeof(bool)); }
public MySqlSqlTranslatingExpressionVisitor( RelationalSqlTranslatingExpressionVisitorDependencies dependencies, QueryCompilationContext queryCompilationContext, QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor, [CanBeNull] IMySqlJsonPocoTranslator jsonPocoTranslator) : base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor) { _jsonPocoTranslator = jsonPocoTranslator; _sqlExpressionFactory = (MySqlSqlExpressionFactory)Dependencies.SqlExpressionFactory; }
//private readonly RelationalTypeMapping _jsonTypeMapping; public MySqlSqlTranslatingExpressionVisitor( RelationalSqlTranslatingExpressionVisitorDependencies dependencies, IModel model, QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor) : base(dependencies, model, queryableMethodTranslatingExpressionVisitor) { _jsonPocoTranslator = ((MySqlMemberTranslatorProvider)Dependencies.MemberTranslatorProvider).JsonPocoTranslator; _sqlExpressionFactory = (MySqlSqlExpressionFactory)Dependencies.SqlExpressionFactory; //_jsonTypeMapping = _sqlExpressionFactory.FindMapping("json"); }
public MySqlQueryTranslationPostprocessorFactory( QueryTranslationPostprocessorDependencies dependencies, RelationalQueryTranslationPostprocessorDependencies relationalDependencies, IMySqlOptions options, ISqlExpressionFactory sqlExpressionFactory) { _dependencies = dependencies; _relationalDependencies = relationalDependencies; _options = options; _sqlExpressionFactory = (MySqlSqlExpressionFactory)sqlExpressionFactory; }
public MySqlQueryTranslationPostprocessor( QueryTranslationPostprocessorDependencies dependencies, RelationalQueryTranslationPostprocessorDependencies relationalDependencies, QueryCompilationContext queryCompilationContext, IMySqlOptions options, MySqlSqlExpressionFactory sqlExpressionFactory) : base(dependencies, relationalDependencies, queryCompilationContext) { _options = options; _sqlExpressionFactory = sqlExpressionFactory; }
public static SqlExpression GetStDistanceFunctionCall( SqlExpression left, SqlExpression right, Type resultType, RelationalTypeMapping resultTypeMapping, MySqlSqlExpressionFactory sqlExpressionFactory) { // Returns null for empty geometry arguments. return(sqlExpressionFactory.NullableFunction( "ST_Distance", new[] { left, right }, resultType, resultTypeMapping, false)); }
public MySqlJsonParameterExpressionVisitor(MySqlSqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) { _sqlExpressionFactory = sqlExpressionFactory; _options = options; }
private static SqlExpression GetAndoyerDistance( SqlExpression left, SqlExpression right, Type resultType, MySqlSqlExpressionFactory sqlExpressionFactory) { SqlExpression toDegrees(SqlExpression coord) => sqlExpressionFactory.Divide( sqlExpressionFactory.Multiply( coord, sqlExpressionFactory.NonNullableFunction( "PI", Array.Empty <SqlExpression>(), resultType)), sqlExpressionFactory.Constant(180.0)); SqlExpression xCoord(SqlExpression point) => sqlExpressionFactory.NullableFunction( "ST_X", new[] { point }, resultType); SqlExpression yCoord(SqlExpression point) => sqlExpressionFactory.NullableFunction( "ST_Y", new[] { point }, resultType); var c0 = sqlExpressionFactory.Constant(0.0); var c1 = sqlExpressionFactory.Constant(1.0); var c2 = sqlExpressionFactory.Constant(2.0); var c3 = sqlExpressionFactory.Constant(3.0); var c2Int = sqlExpressionFactory.Constant(2); var lon1 = toDegrees(xCoord(left)); var lat1 = toDegrees(yCoord(left)); var lon2 = toDegrees(xCoord(right)); var lat2 = toDegrees(yCoord(right)); var g = sqlExpressionFactory.Divide( sqlExpressionFactory.Subtract( lat1, lat2), c2); var lambda = sqlExpressionFactory.Divide( sqlExpressionFactory.Subtract( lon1, lon2), c2); var f = sqlExpressionFactory.Divide( sqlExpressionFactory.Add( lat1, lat2), c2); var sinG2 = sqlExpressionFactory.NullableFunction( "POWER", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "SIN", new[] { g }, resultType), c2Int }, resultType); var cosG2 = sqlExpressionFactory.NullableFunction( "POWER", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "COS", new[] { g }, resultType), c2Int }, resultType); var sinF2 = sqlExpressionFactory.NullableFunction( "POWER", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "SIN", new[] { f }, resultType), c2Int }, resultType); var cosF2 = sqlExpressionFactory.NullableFunction( "POWER", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "COS", new[] { f }, resultType), c2Int }, resultType); var sinL2 = sqlExpressionFactory.NullableFunction( "POWER", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "SIN", new[] { lambda }, resultType), c2Int }, resultType); var cosL2 = sqlExpressionFactory.NullableFunction( "POWER", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "COS", new[] { lambda }, resultType), c2Int }, resultType); var s = sqlExpressionFactory.Add( sqlExpressionFactory.Multiply(sinG2, cosL2), sqlExpressionFactory.Multiply(cosF2, sinL2)); var c = sqlExpressionFactory.Add( sqlExpressionFactory.Multiply(cosG2, cosL2), sqlExpressionFactory.Multiply(sinF2, sinL2)); var radiusA = sqlExpressionFactory.Constant(6378137.0); var radiusB = sqlExpressionFactory.Constant(6356752.3142451793); var flattening = sqlExpressionFactory.Divide( sqlExpressionFactory.Subtract(radiusA, radiusB), radiusA); var omega = sqlExpressionFactory.NullableFunction( "ATAN", new[] { sqlExpressionFactory.NullableFunction( "SQRT", new[] { sqlExpressionFactory.Divide(s, c) }, resultType, false) }, resultType); var r3 = sqlExpressionFactory.Divide( sqlExpressionFactory.Multiply( c3, sqlExpressionFactory.NullableFunction( "SQRT", new[] { sqlExpressionFactory.Multiply(s, c) }, resultType, false)), omega); var d = sqlExpressionFactory.Multiply( sqlExpressionFactory.Multiply(c2, omega), radiusA); var h1 = sqlExpressionFactory.Divide( sqlExpressionFactory.Subtract(r3, c1), sqlExpressionFactory.Multiply(c2, c)); var h2 = sqlExpressionFactory.Divide( sqlExpressionFactory.Add(r3, c1), sqlExpressionFactory.Multiply(c2, s)); var andoyer = sqlExpressionFactory.Multiply( d, sqlExpressionFactory.Add( c1, sqlExpressionFactory.Multiply( flattening, sqlExpressionFactory.Subtract( sqlExpressionFactory.Multiply( sqlExpressionFactory.Multiply( h1, sinF2), cosG2), sqlExpressionFactory.Multiply( sqlExpressionFactory.Multiply( h2, cosF2), sinG2))))); return(sqlExpressionFactory.Case( new[] { new CaseWhenClause( sqlExpressionFactory.OrElse( sqlExpressionFactory.OrElse( sqlExpressionFactory.AndAlso( sqlExpressionFactory.Equal(lambda, c0), sqlExpressionFactory.Equal(g, c0)), sqlExpressionFactory.Equal(s, c0)), sqlExpressionFactory.Equal(c, c0)), c0), }, andoyer)); }
public MySqlBug96947WorkaroundExpressionVisitor(MySqlSqlExpressionFactory sqlExpressionFactory) { _sqlExpressionFactory = sqlExpressionFactory; }
private static SqlExpression GetHaversineDistance( SqlExpression left, SqlExpression right, Type resultType, MySqlSqlExpressionFactory sqlExpressionFactory) { // HAVERSINE = 6371000 * 2 * ASIN( // SQRT( // POWER(SIN((ST_Y(pt2) - ST_Y(pt1)) * pi()/180 / 2), 2) + // COS(ST_Y(pt1) * pi()/180) * // COS(ST_Y(pt2) * pi()/180) * // POWER(SIN((ST_X(pt2) - ST_X(pt1)) * pi()/180 / 2), 2) // ) // ) return(sqlExpressionFactory.Multiply( sqlExpressionFactory.Constant(6370986.0), // see https://postgis.net/docs/manual-1.4/ST_Distance_Sphere.html sqlExpressionFactory.Multiply( sqlExpressionFactory.Constant(2.0), sqlExpressionFactory.NullableFunction( "ASIN", new[] { sqlExpressionFactory.NullableFunction( "SQRT", new[] { sqlExpressionFactory.Add( sqlExpressionFactory.NullableFunction( "POWER", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "SIN", new[] { sqlExpressionFactory.Divide( sqlExpressionFactory.Divide( sqlExpressionFactory.Multiply( sqlExpressionFactory.Subtract( sqlExpressionFactory.NullableFunction( "ST_Y", new[] { right }, resultType), sqlExpressionFactory.NullableFunction( "ST_Y", new[] { left }, resultType)), sqlExpressionFactory.NonNullableFunction( "PI", Array.Empty <SqlExpression>(), resultType)), sqlExpressionFactory.Constant(180.0)), sqlExpressionFactory.Constant(2.0)) }, resultType), sqlExpressionFactory.Constant(2), }, resultType), sqlExpressionFactory.Multiply( sqlExpressionFactory.NullableFunction( "COS", new[] { sqlExpressionFactory.Divide( sqlExpressionFactory.Multiply( sqlExpressionFactory.NullableFunction( "ST_Y", new[] { left }, resultType), sqlExpressionFactory.NonNullableFunction( "PI", Array.Empty <SqlExpression>(), resultType)), sqlExpressionFactory.Constant(180.0)), }, resultType), sqlExpressionFactory.Multiply( sqlExpressionFactory.NullableFunction( "COS", new[] { sqlExpressionFactory.Divide( sqlExpressionFactory.Multiply( sqlExpressionFactory.NullableFunction( "ST_Y", new[] { right }, resultType), sqlExpressionFactory.NonNullableFunction( "PI", Array.Empty <SqlExpression>(), resultType)), sqlExpressionFactory.Constant(180.0)), }, resultType), sqlExpressionFactory.NullableFunction( "POWER", new SqlExpression[] { sqlExpressionFactory.NullableFunction( "SIN", new[] { sqlExpressionFactory.Divide( sqlExpressionFactory.Divide( sqlExpressionFactory.Multiply( sqlExpressionFactory.Subtract( sqlExpressionFactory.NullableFunction( "ST_X", new[] { right }, resultType), sqlExpressionFactory.NullableFunction( "ST_X", new[] { left }, resultType)), sqlExpressionFactory.NonNullableFunction( "PI", Array.Empty <SqlExpression>(), resultType)), sqlExpressionFactory.Constant(180.0)), sqlExpressionFactory.Constant(2.0)) }, resultType), sqlExpressionFactory.Constant(2), }, resultType)))) }, resultType, false) }, resultType, false)))); }
public static SqlExpression GetStDistanceSphereFunctionCall( SqlExpression left, SqlExpression right, SpatialDistanceAlgorithm algorithm, Type resultType, RelationalTypeMapping resultTypeMapping, MySqlSqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) { if (options.ServerVersion.Supports.SpatialDistanceSphereFunction) { if (algorithm == SpatialDistanceAlgorithm.Native) { // Returns null for empty geometry arguments. return(sqlExpressionFactory.NullableFunction( "ST_Distance_Sphere", new[] { left, right }, resultType, resultTypeMapping, false)); } if (algorithm == SpatialDistanceAlgorithm.Andoyer && options.ServerVersion.Supports.SpatialDistanceFunctionImplementsAndoyer) { // The `ST_Distance()` in MySQL already uses the Andoyer algorithm, when SRID 4326 is associated // with the geometry. // CHECK: It might be faster to just run the custom implementation, if `ST_SRID()` does not support // a second parameter yet (see SetSrid()). return(sqlExpressionFactory.Case( new[] { new CaseWhenClause( sqlExpressionFactory.Equal( sqlExpressionFactory.NullableFunction( "ST_SRID", new[] { left }, typeof(int)), sqlExpressionFactory.Constant(4326)), GetStDistanceFunctionCall( left, right, resultType, resultTypeMapping, sqlExpressionFactory)) }, GetStDistanceFunctionCall( SetSrid(left, 4326, sqlExpressionFactory, options), SetSrid(right, 4326, sqlExpressionFactory, options), resultType, resultTypeMapping, sqlExpressionFactory))); } if (algorithm == SpatialDistanceAlgorithm.Haversine) { // The Haversine algorithm assumes planar coordinates. return(sqlExpressionFactory.Case( new[] { new CaseWhenClause( sqlExpressionFactory.Equal( sqlExpressionFactory.NullableFunction( "ST_SRID", new[] { left }, typeof(int)), sqlExpressionFactory.Constant(0)), GetHaversineDistance( left, right, resultType, sqlExpressionFactory)) }, GetHaversineDistance( SetSrid(left, 0, sqlExpressionFactory, options), SetSrid(right, 0, sqlExpressionFactory, options), resultType, sqlExpressionFactory))); } } if (algorithm == SpatialDistanceAlgorithm.Haversine) { return(GetHaversineDistance(left, right, resultType, sqlExpressionFactory)); } return(GetAndoyerDistance(left, right, resultType, sqlExpressionFactory)); }
public MySqlHavingExpressionVisitor(MySqlSqlExpressionFactory sqlExpressionFactory) { _sqlExpressionFactory = sqlExpressionFactory; }
public MySqlJsonDbFunctionsTranslator([NotNull] MySqlSqlExpressionFactory sqlExpressionFactory) { _sqlExpressionFactory = sqlExpressionFactory; }
public MySqlDbFunctionsExtensionsMethodTranslator(ISqlExpressionFactory sqlExpressionFactory) { _sqlExpressionFactory = (MySqlSqlExpressionFactory)sqlExpressionFactory; }
public MySqlByteArrayMethodTranslator([NotNull] MySqlSqlExpressionFactory sqlExpressionFactory) { _sqlExpressionFactory = sqlExpressionFactory; }
public MySqlJsonDomTranslator([NotNull] MySqlSqlExpressionFactory sqlExpressionFactory, [NotNull] IRelationalTypeMappingSource typeMappingSource) { _typeMappingSource = typeMappingSource; _sqlExpressionFactory = sqlExpressionFactory; }
public MySqlRegexIsMatchTranslator(ISqlExpressionFactory sqlExpressionFactory) { _sqlExpressionFactory = (MySqlSqlExpressionFactory)sqlExpressionFactory; }
public ZackQuerySqlGenerator_MySQLPomelo(QuerySqlGeneratorDependencies dependencies, ISqlGenerationHelper sqlGenerationHelper, MySqlSqlExpressionFactory sqlExpressionFactory, IMySqlOptions options) : base(dependencies, sqlExpressionFactory, options) { this._sqlGenerationHelper = sqlGenerationHelper; this.IsForBatchEF = false; }