/// <summary> /// Render a SqlString for the expression. /// </summary> /// <param name="criteria"></param> /// <param name="criteriaQuery"></param> /// <param name="enabledFilters"></param> /// <returns> /// A SqlString that contains a valid Sql fragment. /// </returns> public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { //criteriaQuery.AddUsedTypedValues(GetTypedValues(criteria, criteriaQuery)); ISpatialDialect spatialDialect = (ISpatialDialect)criteriaQuery.Factory.Dialect; string[] columns1 = GetColumnNames(criteria, criteriaQuery, this.propertyName); SqlStringBuilder builder = new SqlStringBuilder(10 * columns1.Length); for (int i = 0; i < columns1.Length; i++) { if (i > 0) { builder.Add(" AND "); } if (this.anotherGeometry is IGeometry) { Parameter[] parameters = criteriaQuery.NewQueryParameter(this.GetTypedValues(criteria, criteriaQuery)[0]).ToArray(); builder.Add(spatialDialect.GetSpatialRelationString(columns1[i], this.relation, parameters.Single(), true)); } else { string[] columns2 = GetColumnNames(criteria, criteriaQuery, (string)this.anotherGeometry); builder.Add(spatialDialect.GetSpatialRelationString(columns1[i], this.relation, columns2[i], true)); } } return(builder.ToSqlString()); }
/// <summary> /// Initializes a new instance of the <see cref="SpatialValidationFunction"/> class. /// </summary> /// <param name="spatialDialect">The spatial dialect.</param> /// <param name="validation">The validation.</param> public SpatialValidationFunction(ISpatialDialect spatialDialect, SpatialValidation validation) : base(validation.ToString(), NHibernateUtil.Boolean) { this.spatialDialect = spatialDialect; this.validation = validation; this.allowedArgsCount = 1; }
/// <summary> /// Render a SqlString for the expression. /// </summary> /// <param name="criteria"></param> /// <param name="criteriaQuery"></param> /// <param name="enabledFilters"></param> /// <returns> /// A SqlString that contains a valid Sql fragment. /// </returns> public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { criteriaQuery.AddUsedTypedValues(GetTypedValues(criteria, criteriaQuery)); ISpatialDialect spatialDialect = (ISpatialDialect)criteriaQuery.Factory.Dialect; string[] columnsUsingProjection = criteriaQuery.GetColumnsUsingProjection(criteria, this.propertyName); IType typeUsingProjection = criteriaQuery.GetTypeUsingProjection(criteria, this.propertyName); if (typeUsingProjection.ReturnedClass != typeof(IGeometry)) { throw new QueryException(string.Format("Type mismatch in {0}: {1} expected type {2}, actual type {3}", GetType(), this.propertyName, typeof(IGeometry), typeUsingProjection.ReturnedClass)); } if (typeUsingProjection.IsCollectionType) { throw new QueryException(string.Format("cannot use collection property ({0}.{1}) directly in a criterion, use ICriteria.CreateCriteria instead", criteriaQuery.GetEntityName(criteria), this.propertyName)); } SqlStringBuilder builder = new SqlStringBuilder(2 * columnsUsingProjection.Length); for (int i = 0; i < columnsUsingProjection.Length; i++) { if (i > 0) { builder.Add(" AND "); } builder.Add(spatialDialect.GetSpatialValidationString(columnsUsingProjection[i], this.validation, true)); } return(builder.ToSqlString()); }
/// <summary> /// Initializes a new instance of the <see cref="SpatialRelationFunction"/> class. /// </summary> /// <param name="spatialDialect">The spatial dialect.</param> /// <param name="relation">The relation.</param> public SpatialRelationFunction(ISpatialDialect spatialDialect, SpatialRelation relation) : base(relation.ToString(), NHibernateUtil.Boolean) { this.spatialDialect = spatialDialect; this.relation = relation; this.allowedArgsCount = 2; }
/// <summary> /// Creates SQL to create auxiliary database objects. /// </summary> /// <param name="dialect">The dialect.</param> /// <param name="mapping">The mapping.</param> /// <param name="defaultCatalog">The default catalog.</param> /// <param name="defaultSchema">The default schema.</param> /// <returns></returns> public override string SqlCreateString(NHibernate.Dialect.Dialect dialect, IMapping mapping, string defaultCatalog, string defaultSchema) { ISpatialDialect spatialDialect = (ISpatialDialect)dialect; StringBuilder builder = new StringBuilder(); // Create general objects builder.Append(spatialDialect.GetSpatialCreateString(defaultSchema)); // Create objects per column VisitGeometryColumns(delegate(Table table, Column column) { // Ugly trick: We use Comparator property to get the column instance of IGeometryUserType. // (Comparator is mainly used in IVersionType comparisons) // Maybe it will require to implement IComparer in IGeometryUserType, just to comply. // // It would be nicer if CustomType made UserType property public (today is protected). IGeometryUserType geometryType = (IGeometryUserType)((CustomType)column.Value.Type).Comparator; // The previous trick allows to get geometry type properties, such as SRID. int srid = geometryType.SRID; string subtype = geometryType.Subtype; builder.Append(spatialDialect.GetSpatialCreateString(defaultSchema, table.Name, column.Name, srid, subtype)); }); return(builder.ToString()); }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="criteria"></param> /// <param name="position"></param> /// <param name="criteriaQuery"></param> /// <param name="enabledFilters"></param> /// <returns></returns> public override SqlString ToSqlString(ICriteria criteria, int position, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { ISpatialDialect spatialDialect = (ISpatialDialect)criteriaQuery.Factory.Dialect; string column1 = criteriaQuery.GetColumn(criteria, this.propertyName); string column2 = criteriaQuery.GetColumn(criteria, this.anotherPropertyName); SqlString sqlString; if (this.pattern == null) { sqlString = spatialDialect.GetSpatialRelateString(column1, column2, null, false, false); } else { string column3 = criteriaQuery.GetColumn(criteria, this.pattern); if (column3 == null) { sqlString = spatialDialect.GetSpatialRelateString(column1, column2, this.pattern, true, false); } else { sqlString = spatialDialect.GetSpatialRelateString(column1, column2, column3, false, false); } } return(new SqlStringBuilder() .Add(sqlString) .Add(" as y") .Add(position.ToString()) .Add("_") .ToSqlString()); }
private void Cleanup() { sessions.Close(); sessions = null; spatialDialect = null; connectionProvider = null; lastOpenedSession = null; configuration = null; }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="criteria"></param> /// <param name="position"></param> /// <param name="criteriaQuery"></param> /// <param name="enabledFilters"></param> /// <returns></returns> public override SqlString ToSqlString(ICriteria criteria, int position, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { ISpatialDialect spatialDialect = (ISpatialDialect)criteriaQuery.Factory.Dialect; string column = criteriaQuery.GetColumn(criteria, this.propertyName); SqlString sqlString = this.ToSqlString(column, spatialDialect); return(new SqlStringBuilder() .Add(sqlString) .Add(" as y") .Add(position.ToString()) .Add("_") .ToSqlString()); }
/// <summary> /// Creates SQL to drop auxiliary database objects. /// </summary> /// <param name="dialect">The dialect.</param> /// <param name="defaultCatalog">The default catalog.</param> /// <param name="defaultSchema">The default schema.</param> /// <returns></returns> public override string SqlDropString(NHibernate.Dialect.Dialect dialect, string defaultCatalog, string defaultSchema) { ISpatialDialect spatialDialect = (ISpatialDialect)dialect; StringBuilder builder = new StringBuilder(); // Drop objects per column VisitGeometryColumns((table, column) => builder.Append(spatialDialect.GetSpatialDropString(defaultSchema, table.Name, column.Name))); // Drop general objects builder.Append(spatialDialect.GetSpatialDropString(defaultSchema)); return(builder.ToString()); }
/// <summary> /// Creates SQL to create auxiliary database objects. /// </summary> /// <param name="dialect">The dialect.</param> /// <param name="mapping">The mapping.</param> /// <param name="defaultCatalog">The default catalog.</param> /// <param name="defaultSchema">The default schema.</param> /// <returns></returns> public override string SqlCreateString(NHibernate.Dialect.Dialect dialect, IMapping mapping, string defaultCatalog, string defaultSchema) { ISpatialDialect spatialDialect = (ISpatialDialect)dialect; StringBuilder builder = new StringBuilder(); // Create general objects builder.Append(spatialDialect.GetSpatialCreateString(defaultSchema)); // Create objects per column VisitGeometryColumns((tbl, col) => ColumnVisitorSQLCreate(tbl, col, builder, defaultSchema, spatialDialect)); return(builder.ToString()); }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="criteria"></param> /// <param name="position"></param> /// <param name="criteriaQuery"></param> /// <returns></returns> public override SqlString ToSqlString(ICriteria criteria, int position, ICriteriaQuery criteriaQuery) { ISpatialDialect spatialDialect = (ISpatialDialect)criteriaQuery.Factory.Dialect; string column1 = criteriaQuery.GetColumn(criteria, this.propertyName); SqlString sqlString = spatialDialect.GetSpatialValidationString(column1, this.validation, false); return(new SqlStringBuilder() .Add(sqlString) .Add(" as y") .Add(position.ToString()) .Add("_") .ToSqlString()); }
/// <summary> /// Render a SqlString for the expression. /// </summary> /// <param name="criteria"></param> /// <param name="criteriaQuery"></param> /// <param name="enabledFilters"></param> /// <returns> /// A SqlString that contains a valid Sql fragment. /// </returns> public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { IEnumerable <Parameter> parameters = criteriaQuery.NewQueryParameter(GetParameterTypedValue(criteria, criteriaQuery)); Parameter p = null; foreach (Parameter p_ in parameters) { p = p_; } //Parameter[] p = criteriaQuery.NewQueryParameter(GetTypedValues(criteria, criteriaQuery)[0]).ToArray(); ISpatialDialect spatialDialect = (ISpatialDialect)criteriaQuery.Factory.Dialect; string[] columnsUsingProjection = criteriaQuery.GetColumnsUsingProjection(criteria, this.propertyName); IType typeUsingProjection = criteriaQuery.GetTypeUsingProjection(criteria, this.propertyName); if (typeUsingProjection.IsCollectionType) { throw new QueryException(string.Format("cannot use collection property ({0}.{1}) directly in a criterion, use ICriteria.CreateCriteria instead", criteriaQuery.GetEntityName(criteria), this.propertyName)); } string[] keyColumns = criteriaQuery.GetIdentifierColumns(criteria); string entityType = criteriaQuery.GetEntityName(criteria, this.propertyName); AbstractEntityPersister entityPersister = (AbstractEntityPersister)criteriaQuery.Factory.GetEntityPersister(entityType); // Only one key column is assumed string keyColumn = keyColumns[0]; string alias = criteriaQuery.GetSQLAlias(criteria, this.propertyName); string tableName = entityPersister.TableName; int aliasLength = alias.Length + 1; SqlStringBuilder builder = new SqlStringBuilder(10 * columnsUsingProjection.Length); for (int i = 0; i < columnsUsingProjection.Length; i++) { if (i > 0) { builder.Add(" AND "); } string geometryColumn = columnsUsingProjection[i].Remove(0, aliasLength); builder.Add(spatialDialect.GetSpatialFilterString(alias, geometryColumn, keyColumn, tableName, p)); } return(builder.ToSqlString()); }
/// <summary> /// Initializes a new instance of the <see cref="SpatialAnalysisFunction"/> class. /// </summary> /// <param name="spatialDialect">The spatial dialect.</param> /// <param name="analysis">The analysis.</param> public SpatialAnalysisFunction(ISpatialDialect spatialDialect, SpatialAnalysis analysis) : base(analysis.ToString(), (analysis == SpatialAnalysis.Distance ? NHibernateUtil.Double : spatialDialect.GeometryType)) { this.spatialDialect = spatialDialect; this.analysis = analysis; if (this.analysis == SpatialAnalysis.ConvexHull) { this.allowedArgsCount = 1; } else { this.allowedArgsCount = 2; } }
/// <summary> /// Initializes a new instance of the <see cref="SpatialAnalysisFunction"/> class. /// </summary> /// <param name="spatialDialect">The spatial dialect.</param> /// <param name="analysis">The analysis.</param> public SpatialAnalysisFunction(ISpatialDialect spatialDialect, SpatialAnalysis analysis) : base(analysis.ToString(), (analysis == SpatialAnalysis.Distance ? NHibernateUtil.Double : spatialDialect.GeometryType) ) { this.spatialDialect = spatialDialect; this.analysis = analysis; if (this.analysis == SpatialAnalysis.ConvexHull) { this.allowedArgsCount = 1; } else { this.allowedArgsCount = 2; } }
/// <summary> /// Creates SQL to create auxiliary database objects. /// </summary> /// <param name="dialect">The dialect.</param> /// <param name="mapping">The mapping.</param> /// <param name="defaultCatalog">The default catalog.</param> /// <param name="defaultSchema">The default schema.</param> /// <returns></returns> public override string SqlCreateString(NHibernate.Dialect.Dialect dialect, IMapping mapping, string defaultCatalog, string defaultSchema) { ISpatialDialect spatialDialect = (ISpatialDialect)dialect; StringBuilder builder = new StringBuilder(); // Create general objects builder.Append(spatialDialect.GetSpatialCreateString(defaultSchema)); // Create objects per column VisitGeometryColumns(delegate(Table table, Column column) { IGeometryUserType geometryType = (IGeometryUserType)((CustomType)column.Value.Type).UserType; int srid = geometryType.SRID; string subtype = geometryType.Subtype; int dimension = geometryType.Dimension; builder.Append(spatialDialect.GetSpatialCreateString(defaultSchema, table.Name, column.Name, srid, subtype, dimension)); }); return(builder.ToString()); }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="criteria"></param> /// <param name="position"></param> /// <param name="criteriaQuery"></param> /// <param name="enabledFilters"></param> /// <returns></returns> public override SqlString ToSqlString(ICriteria criteria, int position, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { ISpatialDialect spatialDialect = (ISpatialDialect)criteriaQuery.Factory.Dialect; string column1 = criteriaQuery.GetColumn(criteria, this.propertyName); SqlString sqlString; if (this.IsBinaryOperation()) { string column2 = criteriaQuery.GetColumn(criteria, this.anotherPropertyName); sqlString = spatialDialect.GetSpatialAnalysisString(column1, this.analysis, column2); } else { sqlString = spatialDialect.GetSpatialAnalysisString(column1, this.analysis, this.arguments); } return(new SqlStringBuilder() .Add(sqlString) .Add(" as y") .Add(position.ToString()) .Add("_") .ToSqlString()); }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="column">The column.</param> /// <param name="spatialDialect">The spatial dialect.</param> /// <returns></returns> public override SqlString ToSqlString(string column, ISpatialDialect spatialDialect) { return spatialDialect.GetSpatialAggregateString(column, this.aggregate); }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="column">The column.</param> /// <param name="spatialDialect">The spatial dialect.</param> /// <returns></returns> public virtual SqlString ToSqlString(string column, ISpatialDialect spatialDialect) { return null; }
private void ColumnVisitorSQLCreate(Table table, Column column, StringBuilder builder, string defaultSchema, ISpatialDialect spatialDialect) { IGeometryUserType geometryType = (IGeometryUserType)((CustomType)column.Value.Type).UserType; int srid = geometryType.SRID; var key = table.Name + "." + column.Name; if (SridMap.ContainsKey(key) && SridMap[key] > 0) { srid = SridMap[key]; } string subtype = geometryType.Subtype; int dimension = geometryType.Dimension; builder.Append(spatialDialect.GetSpatialCreateString(defaultSchema, table.Name, column.Name, srid, subtype, dimension, column.IsNullable)); }
private void BuildSessionFactory() { sessions = configuration.BuildSessionFactory(); spatialDialect = (ISpatialDialect)((ISessionFactoryImplementor)this.sessions).Dialect; connectionProvider = ((ISessionFactoryImplementor)this.sessions).ConnectionProvider as DebugConnectionProvider; }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="column">The column.</param> /// <param name="spatialDialect">The spatial dialect.</param> /// <returns></returns> public override SqlString ToSqlString(string column, ISpatialDialect spatialDialect) { return(spatialDialect.GetSpatialTransformString(column, this.targetSrid)); }
/// <summary> /// Initializes a new instance of the <see cref="MsSqlLegacyDialect"/> class. /// </summary> public MsSqlLegacyDialect() { SpatialDialect.LastInstantiated = this; worker = new MsSqlLegacyFunctionRegistration(this); }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="column">The column.</param> /// <param name="spatialDialect">The spatial dialect.</param> /// <returns></returns> public virtual SqlString ToSqlString(string column, ISpatialDialect spatialDialect) { return(null); }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="column">The column.</param> /// <param name="spatialDialect">The spatial dialect.</param> /// <returns></returns> public override SqlString ToSqlString(string column, ISpatialDialect spatialDialect) { return(spatialDialect.GetSpatialAggregateString(column, this.aggregate)); }
/// <summary> /// Gets a value indicating whether the session supports spatial metadata. /// </summary> /// <value> /// <c>true</c> if it supports spatial metadata; otherwise, <c>false</c>. /// </value> /// <param name="session">The session</param> /// <param name="metadataClass">The metadata class</param> public static bool SupportsSpatialMetadata(ISession session, MetadataClass metadataClass) { ISpatialDialect spatialDialect = (ISpatialDialect)((ISessionFactoryImplementor)session.SessionFactory).Dialect; return(spatialDialect.SupportsSpatialMetadata(metadataClass)); }
/// <summary> /// Initializes a new instance of the <see cref="MsSql2008SpatialDialect"/> class. /// </summary> protected MsSql2008SpatialDialect(string sqlTypeName, string geometryColumnsViewName, IType geometryType) { SpatialDialect.LastInstantiated = this; worker = new MsSql2008FunctionRegistration(this, sqlTypeName, geometryColumnsViewName, geometryType); }
/// <summary> /// Render the SQL Fragment. /// </summary> /// <param name="column">The column.</param> /// <param name="spatialDialect">The spatial dialect.</param> /// <returns></returns> public override SqlString ToSqlString(string column, ISpatialDialect spatialDialect) { return spatialDialect.GetSpatialTransformString(column, this.targetSrid); }