/// <summary>
 /// Executes the operation
 /// </summary>
 /// <param name="rows"></param>
 /// <returns></returns>
 public override IEnumerable <FdoRow> Execute(IEnumerable <FdoRow> rows)
 {
     foreach (FdoFeature feat in _table.Rows)
     {
         yield return(FdoRow.FromFeatureRow(feat));
     }
 }
Ejemplo n.º 2
0
 private FdoRow ConvertValues(FdoRow row)
 {
     foreach (string propertyName in _rules.Keys)
     {
         if (row[propertyName] != null)
         {
             FdoDataPropertyConversionRule rule = _rules[propertyName];
             LiteralValue old = ValueConverter.GetConvertedValue(row[propertyName]);
             if (old.LiteralValueType == LiteralValueType.LiteralValueType_Data)
             {
                 DataValue converted = ValueConverter.ConvertDataValue((DataValue)old, rule.TargetDataType, rule.NullOnFailure, rule.Truncate);
                 row[propertyName] = ValueConverter.GetClrValue(converted);
                 if (converted != null)
                 {
                     converted.Dispose();
                 }
                 else
                 {
                     if (!rule.NullOnFailure)
                     {
                         throw new FdoException("Converting " + old + " to " + rule.TargetDataType + " resulted in a NULL value");
                     }
                 }
                 old.Dispose();
             }
         }
     }
     return(row);
 }
 private FdoRow ConvertValues(FdoRow row)
 {
     foreach(string propertyName in _rules.Keys)
     {
         if (row[propertyName] != null)
         {
             FdoDataPropertyConversionRule rule = _rules[propertyName];
             LiteralValue old = ValueConverter.GetConvertedValue(row[propertyName]);
             if (old.LiteralValueType == LiteralValueType.LiteralValueType_Data)
             {
                 DataValue converted = ValueConverter.ConvertDataValue((DataValue)old, rule.TargetDataType, rule.NullOnFailure, rule.Truncate);
                 row[propertyName] = ValueConverter.GetClrValue(converted);
                 if (converted != null)
                 {
                     converted.Dispose();
                 }
                 else
                 {
                     if (!rule.NullOnFailure)
                         throw new FdoException("Converting " + old + " to " + rule.TargetDataType + " resulted in a NULL value");
                 }
                 old.Dispose();
             }
         }
     }
     return row;
 }
        private FdoRow Flatten(FdoRow row)
        {
            //Not applicable?
            if (row.Geometry == null)
            {
                return(row);
            }

            //Already 2D? Move along!
            if (FdoGeometryUtil.Is2D(row.Geometry))
            {
                return(row);
            }

            IGeometry geom  = row.Geometry;
            IGeometry trans = FdoGeometryUtil.Flatten(geom, _geomFactory);

            //Dispose the original if flatten returned a new instance
            if (!IGeometry.ReferenceEquals(geom, trans))
            {
                row.Geometry = trans;
                geom.Dispose();
            }
            return(row);
        }
Ejemplo n.º 5
0
 private string BuildSql(FdoRow obj)
 {
     if (IsUsingPropertyMappings())
     {
         string[] values = new string[_mappings.Count];
         int      i      = 0;
         foreach (string target in _mappings.Keys)
         {
             string name = _mappings[target];
             if (obj[name] != null)
             {
                 if (obj.IsGeometryProperty(name))
                 {
                     values[i] = VALUE_BEGIN + ((IGeometry)obj[name]).Text + VALUE_END;
                 }
                 else if (obj[name].GetType() == typeof(string))
                 {
                     values[i] = VALUE_BEGIN + EscapeValue((string)obj[name]) + VALUE_END;
                 }
                 else if (obj[name].GetType() == typeof(DateTime))
                 {
                     values[i] = VALUE_BEGIN + ((DateTime)obj[name]).ToString(ISO8601_FMT) + VALUE_END;
                 }
                 else
                 {
                     values[i] = VALUE_BEGIN + obj[name].ToString() + VALUE_END;
                 }
             }
             else
             {
                 values[i] = GetNullValue();
             }
             i++;
         }
         return(string.Format(_sqlTpl, values));
     }
     else
     {
         string[] values = new string[_propertyTraversalList.Count];
         for (int i = 0; i < values.Length; i++)
         {
             string name = _propertyTraversalList[i];
             if (obj[name] != null)
             {
                 values[i] = VALUE_BEGIN + obj[name].ToString() + VALUE_END;
             }
             else if (obj[name].GetType() == typeof(DateTime))
             {
                 values[i] = VALUE_BEGIN + ((DateTime)obj[name]).ToString(ISO8601_FMT) + VALUE_END;
             }
             else
             {
                 values[i] = GetNullValue();
             }
         }
         return(string.Format(_sqlTpl, values));
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Executes the operation
        /// </summary>
        /// <param name="rows"></param>
        /// <returns></returns>
        public override IEnumerable <FdoRow> Execute(IEnumerable <FdoRow> rows)
        {
            using (FdoFeatureService service = _conn.CreateFeatureService())
            {
                using (FdoFeatureReader reader = service.SelectFeatures(this.Query))
                {
                    ClassDefinition cd = reader.GetClassDefinition();
                    foreach (PropertyDefinition pd in cd.Properties)
                    {
                        if (pd.PropertyType == PropertyType.PropertyType_RasterProperty)
                        {
                            ignoreProperties.Add(pd.Name);
                        }
                        else if (pd.PropertyType == PropertyType.PropertyType_DataProperty)
                        {
                            DataPropertyDefinition dp = pd as DataPropertyDefinition;
                            if (dp.IsAutoGenerated || dp.ReadOnly)
                            {
                                ignoreProperties.Add(pd.Name);
                            }
                        }
                        else if (pd.PropertyType == PropertyType.PropertyType_GeometricProperty)
                        {
                            GeometricPropertyDefinition gp = pd as GeometricPropertyDefinition;
                            if (gp.ReadOnly)
                            {
                                ignoreProperties.Add(gp.Name);
                            }
                        }
                    }

                    while (reader.ReadNext())
                    {
                        FdoRow row = null;
                        try
                        {
                            row = CreateRowFromReader(reader);
                        }
                        catch (Exception ex)
                        {
                            if (row != null)
                            {
                                RaiseFailedFeatureProcessed(row, ex);
                            }
                            else
                            {
                                RaiseFailedReadFeature(ex.Message, ex);
                            }
                        }
                        if (row != null)
                        {
                            yield return(row);
                        }
                    }
                }
            }
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Called when a row is processed.
 /// </summary>
 /// <param name="op">The operation.</param>
 /// <param name="dictionary">The dictionary.</param>
 protected override void OnFeatureProcessed(FdoOperationBase op, FdoRow dictionary)
 {
     if (op.Statistics.OutputtedRows % this.ReportFrequency == 0)
     {
         if (op is FdoOutputOperation)
         {
             string className = (op as FdoOutputOperation).ClassName;
             SendMessageFormatted("[{0}]: {1} features processed", this.Name, op.Statistics.OutputtedRows);
         }
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Executes this operation
        /// </summary>
        /// <param name="ignored">Ignored rows</param>
        /// <returns></returns>
        public override IEnumerable <FdoRow> Execute(IEnumerable <FdoRow> ignored)
        {
            PrepareForJoin();

            IEnumerable <FdoRow> rightEnumerable = GetRightEnumerable();

            IEnumerable <FdoRow> execute = left.Execute(null);

            foreach (FdoRow leftRow in new EventRaisingEnumerator(left, execute))
            {
                ObjectArrayKeys key = leftRow.CreateKey(leftColumns);
                List <FdoRow>   rightRows;
                if (this.rightRowsByJoinKey.TryGetValue(key, out rightRows))
                {
                    foreach (FdoRow rightRow in rightRows)
                    {
                        rightRowsWereMatched[rightRow] = null;
                        yield return(MergeRows(leftRow, rightRow));
                    }
                }
                else if ((jointype & JoinType.Left) != 0)
                {
                    FdoRow emptyRow = new FdoRow();
                    yield return(MergeRows(leftRow, emptyRow));
                }
                else
                {
                    LeftOrphanRow(leftRow);
                }
            }
            foreach (FdoRow rightRow in rightEnumerable)
            {
                if (rightRowsWereMatched.ContainsKey(rightRow))
                {
                    continue;
                }
                FdoRow emptyRow = new FdoRow();
                if ((jointype & JoinType.Right) != 0)
                {
                    yield return(MergeRows(emptyRow, rightRow));
                }
                else
                {
                    RightOrphanRow(rightRow);
                }
            }
        }
Ejemplo n.º 9
0
        private FdoRow ConvertValues(FdoRow row)
        {
            foreach (string propertyName in _rules.Keys)
            {
                if (row[propertyName] != null)
                {
                    FdoDataPropertyConversionRule rule = _rules[propertyName];
                    LiteralValue old = ValueConverter.GetConvertedValue(row[propertyName]);
                    if (old.LiteralValueType == LiteralValueType.LiteralValueType_Data)
                    {
                        DataValue converted = ValueConverter.ConvertDataValue((DataValue)old, rule.TargetDataType, rule.NullOnFailure, rule.Truncate);
                        row[propertyName] = ValueConverter.GetClrValue(converted);

                        converted.Dispose();
                        old.Dispose();
                    }
                }
            }
            return(row);
        }
        private FdoRow ConvertValues(FdoRow row)
        {
            foreach(string propertyName in _rules.Keys)
            {
                if (row[propertyName] != null)
                {
                    FdoDataPropertyConversionRule rule = _rules[propertyName];
                    LiteralValue old = ValueConverter.GetConvertedValue(row[propertyName]);
                    if (old.LiteralValueType == LiteralValueType.LiteralValueType_Data)
                    {
                        DataValue converted = ValueConverter.ConvertDataValue((DataValue)old, rule.TargetDataType, rule.NullOnFailure, rule.Truncate);
                        row[propertyName] = ValueConverter.GetClrValue(converted);

                        converted.Dispose();
                        old.Dispose();
                    }
                }
            }
            return row;
        }
        private FdoRow Flatten(FdoRow row)
        {
            //Not applicable?
            if (row.Geometry == null)
                return row;

            //Already 2D? Move along!
            if (FdoGeometryUtil.Is2D(row.Geometry))
                return row;

            IGeometry geom = row.Geometry;
            IGeometry trans = FdoGeometryUtil.Flatten(geom, _geomFactory);
            
            //Dispose the original if flatten returned a new instance
            if (!IGeometry.ReferenceEquals(geom, trans))
            {
                row.Geometry = trans;
                geom.Dispose();
            }
            return row;
        }
Ejemplo n.º 12
0
        private FdoRow MakeWkbCompliant(FdoRow row)
        {
            //Not applicable?
            if (row.Geometry == null)
                return row;

            //Already 2D? Move along!
            //if (FdoGeometryUtil.Is2D(row.Geometry))
            //    return row;

            IGeometry geom = row.Geometry;
            IGeometry trans = FdoGeometryUtil.ForceWkb(geom, _geomFactory);

            //Dispose the original if ForceWkb returned a new instance
            if (!IGeometry.ReferenceEquals(geom, trans))
            {
                row.Geometry = trans;
                geom.Dispose();
            }

            return row;
        }
Ejemplo n.º 13
0
        private void PrepareSqlTemplate(FdoRow obj)
        {
            _propertyTraversalList = new List <string>();
            if (IsUsingPropertyMappings())
            {
                List <string> columns = new List <string>();
                foreach (string name in _mappings.Keys)
                {
                    columns.Add(name);
                }
                _sqlTpl  = "INSERT INTO " + GetTableName() + " (" + QUALIFIER_BEGIN + string.Join(QUALIFIER_END + ", " + QUALIFIER_BEGIN, columns.ToArray());
                _sqlTpl += QUALIFIER_END + ") VALUES (";

                List <string> fmtValues = new List <string>();
                for (int i = 0; i < _mappings.Count; i++)
                {
                    fmtValues.Add("{" + i + "}");
                }
                _sqlTpl += string.Join(",", fmtValues.ToArray()) + ")";
            }
            else
            {
                foreach (string name in obj.Keys)
                {
                    _propertyTraversalList.Add(name);
                }
                _sqlTpl  = "INSERT INTO " + GetTableName() + " (" + QUALIFIER_BEGIN + string.Join(QUALIFIER_END + ", " + QUALIFIER_BEGIN, _propertyTraversalList.ToArray());
                _sqlTpl += QUALIFIER_END + ") VALUES (";

                List <string> fmtValues = new List <string>();
                for (int i = 0; i < _propertyTraversalList.Count; i++)
                {
                    fmtValues.Add("{" + i + "}");
                }
                _sqlTpl += string.Join(",", fmtValues.ToArray()) + ")";
            }
        }
Ejemplo n.º 14
0
        private FdoRow MakeWkbCompliant(FdoRow row)
        {
            //Not applicable?
            if (row.Geometry == null)
            {
                return(row);
            }

            //Already 2D? Move along!
            //if (FdoGeometryUtil.Is2D(row.Geometry))
            //    return row;

            IGeometry geom  = row.Geometry;
            IGeometry trans = FdoGeometryUtil.ForceWkb(geom, _geomFactory);

            //Dispose the original if ForceWkb returned a new instance
            if (!IGeometry.ReferenceEquals(geom, trans))
            {
                row.Geometry = trans;
                geom.Dispose();
            }

            return(row);
        }
Ejemplo n.º 15
0
 /// <summary>
 /// Merges the two rows into a single row
 /// </summary>
 /// <param name="leftRow">The left row.</param>
 /// <param name="rightRow">The right row.</param>
 /// <returns></returns>
 protected abstract FdoRow MergeRows(FdoRow leftRow, FdoRow rightRow);
Ejemplo n.º 16
0
 /// <summary>
 /// Called when a row on the right side was filtered by
 /// the join condition, allow a derived class to perform
 /// logic associated to that, such as logging
 /// </summary>
 protected virtual void RightOrphanRow(FdoRow row)
 {
 }
Ejemplo n.º 17
0
 /// <summary>
 /// Called when a row on the left side was filtered by
 /// the join condition, allow a derived class to perform
 /// logic associated to that, such as logging
 /// </summary>
 /// <param name="row">The row.</param>
 protected virtual void LeftOrphanRow(FdoRow row)
 {
 }
Ejemplo n.º 18
0
        /// <summary>
        /// Called when a row on the right side was filtered by
        /// the join condition, allow a derived class to perform 
        /// logic associated to that, such as logging
        /// </summary>
        protected virtual void RightOrphanRow(FdoRow row)
        {

        }
Ejemplo n.º 19
0
 /// <summary>
 /// Called when a row is processed.
 /// </summary>
 /// <param name="op">The operation.</param>
 /// <param name="dictionary">The dictionary.</param>
 protected override void OnFeatureProcessed(FdoToolbox.Core.ETL.Operations.FdoOperationBase op, FdoRow dictionary)
 {
     //We want to avoid log chatter on specialized ETL processes so suppress the base call   
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Raises the row processed event
 /// </summary>
 /// <param name="dictionary">The dictionary.</param>
 void IFdoOperation.RaiseFeatureProcessed(FdoRow dictionary)
 {
     Statistics.MarkFeatureProcessed();
     // we don't have a real event here, so we ignore it
     // it will be handled by the children at any rate
 }
Ejemplo n.º 21
0
 private FdoRow CreateRowFromReader(FdoFeatureReader reader)
 {
     return(FdoRow.FromFeatureReader(reader, ignoreProperties));
 }
Ejemplo n.º 22
0
        /// <summary>
        /// Called when a row on the left side was filtered by
        /// the join condition, allow a derived class to perform 
        /// logic associated to that, such as logging
        /// </summary>
        /// <param name="row">The row.</param>
        protected virtual void LeftOrphanRow(FdoRow row)
        {

        }
Ejemplo n.º 23
0
        private ParameterValueCollection CreateParameterValues(string prefix, FdoRow row)
        {
            ParameterValueCollection values = new ParameterValueCollection();

            if (_mappings == null || _mappings.Count == 0)
            {
                foreach (string col in row.Columns)
                {
                    //No excluded properties or property not in exclusion list
                    if (_unWritableProperties == null || _unWritableProperties.Count == 0 || !_unWritableProperties.Contains(col))
                    {
                        //Omit null values
                        if (row[col] != null && row[col] != DBNull.Value)
                        {
                            if (!row.IsGeometryProperty(col))
                            {
                                LiteralValue dv = ValueConverter.GetConvertedValue(row[col]);
                                if (dv != null)
                                {
                                    ParameterValue pv = new ParameterValue(prefix + col, dv);
                                    values.Add(pv);
                                }
                            }
                            else
                            {
                                IGeometry geom = row[col] as IGeometry;
                                if (geom != null)
                                {
                                    ParameterValue pv = new ParameterValue(prefix + col, new GeometryValue(FdoGeometryFactory.Instance.GetFgf(geom)));
                                    values.Add(pv);
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                foreach (string col in row.Columns)
                {
                    //No excluded properties or property not in exclusion list
                    if (_unWritableProperties == null || _unWritableProperties.Count == 0 || !_unWritableProperties.Contains(col))
                    {
                        //Omit null and un-mapped values
                        if (_mappings[col] != null || row[col] != null && row[col] != DBNull.Value)
                        {
                            if (!row.IsGeometryProperty(col))
                            {
                                LiteralValue dv = ValueConverter.GetConvertedValue(row[col]);
                                if (dv != null)
                                {
                                    ParameterValue pv = new ParameterValue(prefix + _mappings[col], dv);
                                    values.Add(pv);
                                }
                            }
                            else
                            {
                                IGeometry geom = row[col] as IGeometry;
                                if (geom != null)
                                {
                                    ParameterValue pv = new ParameterValue(prefix + _mappings[col], new GeometryValue(FdoGeometryFactory.Instance.GetFgf(geom)));
                                    values.Add(pv);
                                }
                            }
                        }
                    }
                }
            }
            return(values);
        }
Ejemplo n.º 24
0
        private void Bind(FdoRow row)
        {
            //Set all property values to null and then set the proper values
            foreach (string propName in currentValues.Keys)
            {
                //Get the [target] property name. If reverse-mapped to the [source], use the
                //mapped [source] property name. Otherwise it is assumed that [source] name
                //is the same as the [target] name
                string name = propName;
                if (_mappings[name] != null)
                {
                    name = _mappings[name];
                }

                LiteralValue lVal = currentValues[propName] as LiteralValue;
                if (lVal.LiteralValueType == LiteralValueType.LiteralValueType_Data)
                {
                    DataValue dVal = lVal as DataValue;
                    dVal.SetNull();

                    switch (dVal.DataType)
                    {
                    case DataType.DataType_BLOB:
                    {
                        byte [] blob = row[name] as byte[];
                        if (blob != null)
                        {
                            (dVal as BLOBValue).Data = blob;
                        }
                    }
                    break;

                    case DataType.DataType_Boolean:
                    {
                        if (row[name] != null)
                        {
                            (dVal as BooleanValue).Boolean = Convert.ToBoolean(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_Byte:
                    {
                        if (row[name] != null)
                        {
                            (dVal as ByteValue).Byte = Convert.ToByte(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_CLOB:
                    {
                        byte[] clob = row[name] as byte[];
                        if (clob != null)
                        {
                            (dVal as CLOBValue).Data = clob;
                        }
                    }
                    break;

                    case DataType.DataType_DateTime:
                    {
                        if (row[name] != null)
                        {
                            (dVal as DateTimeValue).DateTime = Convert.ToDateTime(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_Decimal:
                    {
                        if (row[name] != null)
                        {
                            (dVal as DecimalValue).Decimal = Convert.ToDouble(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_Double:
                    {
                        if (row[name] != null)
                        {
                            (dVal as DoubleValue).Double = Convert.ToDouble(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_Int16:
                    {
                        if (row[name] != null)
                        {
                            (dVal as Int16Value).Int16 = Convert.ToInt16(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_Int32:
                    {
                        if (row[name] != null)
                        {
                            (dVal as Int32Value).Int32 = Convert.ToInt32(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_Int64:
                    {
                        if (row[name] != null)
                        {
                            (dVal as Int64Value).Int64 = Convert.ToInt64(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_Single:
                    {
                        if (row[name] != null)
                        {
                            (dVal as SingleValue).Single = Convert.ToSingle(row[name]);
                        }
                    }
                    break;

                    case DataType.DataType_String:
                    {
                        if (row[name] != null)
                        {
                            (dVal as StringValue).String = row[name].ToString();
                        }
                    }
                    break;
                    }
                }
                else
                {
                    GeometryValue gVal = lVal as GeometryValue;
                    gVal.SetNull();

                    IGeometry geom = row[name] as IGeometry;
                    if (geom != null)
                    {
                        IGeometry origGeom = geom;
                        //HACK: Just for you SQL Server 2008!
                        if (geom.DerivedType == OSGeo.FDO.Common.GeometryType.GeometryType_Polygon ||
                            geom.DerivedType == OSGeo.FDO.Common.GeometryType.GeometryType_CurvePolygon ||
                            geom.DerivedType == OSGeo.FDO.Common.GeometryType.GeometryType_MultiCurvePolygon ||
                            geom.DerivedType == OSGeo.FDO.Common.GeometryType.GeometryType_MultiPolygon)
                        {
                            if (_conn.Provider.ToUpper().StartsWith("OSGEO.SQLSERVERSPATIAL"))
                            {
                                //This isn't the most optimal way, as the most optimal
                                //method according to RFC48 is to get the source rule and
                                //strictness and pass that to SpatialUtility.GetPolygonVertexOrderAction()
                                //along with the target rule and strictness. I don't think warping the
                                //existing API to address such a provider-specific corner case is worth it.
                                var caps = _clsDef.Capabilities;
                                var rule = caps.get_PolygonVertexOrderRule(name);
                                geom = SpatialUtility.FixPolygonVertexOrder(origGeom, rule);
                            }
                        }

                        if (geom != null)
                        {
                            gVal.Geometry = FdoGeometryFactory.Instance.GetFgf(geom);
                        }
                        else
                        {
                            gVal.Geometry = FdoGeometryFactory.Instance.GetFgf(origGeom);
                        }
                    }
                }
            }
        }
Ejemplo n.º 25
0
 /// <summary>
 /// Merges the two rows into a single row
 /// </summary>
 /// <param name="leftRow">The left row.</param>
 /// <param name="rightRow">The right row.</param>
 /// <returns></returns>
 protected abstract FdoRow MergeRows(FdoRow leftRow, FdoRow rightRow);
Ejemplo n.º 26
0
 /// <summary>
 /// Raises the OnFeatureProcessed event
 /// </summary>
 /// <param name="row"></param>
 public void RaiseFeatureProcessed(FdoRow row)
 {
     Statistics.MarkFeatureProcessed();
     OnFeatureProcessed(this, row);
 }
Ejemplo n.º 27
0
 /// <summary>
 /// Called when a row is processed.
 /// </summary>
 /// <param name="op">The operation.</param>
 /// <param name="dictionary">The dictionary.</param>
 protected override void OnFeatureProcessed(FdoToolbox.Core.ETL.Operations.FdoOperationBase op, FdoRow dictionary)
 {
     //We want to avoid log chatter on specialized ETL processes so suppress the base call
 }
Ejemplo n.º 28
0
 private string BuildSql(FdoRow obj)
 {
     if (IsUsingPropertyMappings())
     {
         string[] values = new string[_mappings.Count];
         int i = 0;
         foreach (string target in _mappings.Keys)
         {
             string name = _mappings[target];
             if (obj[name] != null)
             {
                 if (obj.IsGeometryProperty(name))
                     values[i] = VALUE_BEGIN + ((IGeometry)obj[name]).Text + VALUE_END;
                 else if (obj[name].GetType() == typeof(string))
                     values[i] = VALUE_BEGIN + EscapeValue((string)obj[name]) + VALUE_END;
                 else if (obj[name].GetType() == typeof(DateTime))
                     values[i] = VALUE_BEGIN + ((DateTime)obj[name]).ToString(ISO8601_FMT) + VALUE_END;
                 else
                     values[i] = VALUE_BEGIN + obj[name].ToString() + VALUE_END;
             }
             else
             {
                 values[i] = GetNullValue();
             }
             i++;
         }
         return string.Format(_sqlTpl, values);
     }
     else
     {
         string[] values = new string[_propertyTraversalList.Count];
         for (int i = 0; i < values.Length; i++)
         {
             string name = _propertyTraversalList[i];
             if (obj[name] != null)
                 values[i] = VALUE_BEGIN + obj[name].ToString() + VALUE_END;
             else if (obj[name].GetType() == typeof(DateTime))
                 values[i] = VALUE_BEGIN + ((DateTime)obj[name]).ToString(ISO8601_FMT) + VALUE_END;
             else
                 values[i] = GetNullValue();
         }
         return string.Format(_sqlTpl, values);
     }
 }
 private ParameterValueCollection CreateParameterValues(string prefix, FdoRow row)
 {
     ParameterValueCollection values = new ParameterValueCollection();
     if (_mappings == null || _mappings.Count == 0)
     {
         foreach (string col in row.Columns)
         {
             //No excluded properties or property not in exclusion list
             if (_unWritableProperties == null || _unWritableProperties.Count == 0 || !_unWritableProperties.Contains(col))
             {
                 //Omit null values
                 if (row[col] != null && row[col] != DBNull.Value)
                 {
                     if (!row.IsGeometryProperty(col))
                     {
                         LiteralValue dv = ValueConverter.GetConvertedValue(row[col]);
                         if (dv != null)
                         {
                             ParameterValue pv = new ParameterValue(prefix + col, dv);
                             values.Add(pv);
                         }
                     }
                     else
                     {
                         IGeometry geom = row[col] as IGeometry;
                         if (geom != null)
                         {
                             ParameterValue pv = new ParameterValue(prefix + col, new GeometryValue(FdoGeometryFactory.Instance.GetFgf(geom)));
                             values.Add(pv);
                         }
                     }
                 }
             }
         }
     }
     else
     {
         foreach (string col in row.Columns)
         {
             //No excluded properties or property not in exclusion list
             if (_unWritableProperties == null || _unWritableProperties.Count == 0 || !_unWritableProperties.Contains(col))
             {
                 //Omit null and un-mapped values
                 if (_mappings[col] != null || row[col] != null && row[col] != DBNull.Value)
                 {
                     if (!row.IsGeometryProperty(col))
                     {
                         LiteralValue dv = ValueConverter.GetConvertedValue(row[col]);
                         if (dv != null)
                         {
                             ParameterValue pv = new ParameterValue(prefix + _mappings[col], dv);
                             values.Add(pv);
                         }
                     }
                     else
                     {
                         IGeometry geom = row[col] as IGeometry;
                         if (geom != null)
                         {
                             ParameterValue pv = new ParameterValue(prefix + _mappings[col], new GeometryValue(FdoGeometryFactory.Instance.GetFgf(geom)));
                             values.Add(pv);
                         }
                     }
                 }
             }
         }
     }
     return values;
 }
Ejemplo n.º 30
0
 /// <summary>
 /// Called when [feature processed].
 /// </summary>
 /// <param name="op">The op.</param>
 /// <param name="dictionary">The dictionary.</param>
 protected override void OnFeatureProcessed(FdoOperationBase op, FdoRow dictionary)
 {
     if (op.Statistics.OutputtedRows % this.ReportFrequency == 0)
     {
         if (op is FdoOutputOperation)
         {
             string className = (op as FdoOutputOperation).ClassName;
             SendMessageFormatted("[Join => {0}]: {1} features processed", className, op.Statistics.OutputtedRows);
         }
     }
 }
Ejemplo n.º 31
0
 /// <summary>
 /// Raises the OnFeatureFailed event
 /// </summary>
 /// <param name="row"></param>
 /// <param name="ex"></param>
 public void RaiseFailedFeatureProcessed(FdoRow row, Exception ex)
 {
     Statistics.MarkFeatureFailed();
     this.Error(ex, "Error encountered processing feature: {0}", row.ToString());
     OnFeatureFailed(this, row, ex);
 }
Ejemplo n.º 32
0
        /// <summary>
        /// Executes this operation
        /// </summary>
        /// <param name="ignored">Ignored rows</param>
        /// <returns></returns>
        public override IEnumerable<FdoRow> Execute(IEnumerable<FdoRow> ignored)
        {
            PrepareForJoin();

            IEnumerable<FdoRow> rightEnumerable = GetRightEnumerable();

            IEnumerable<FdoRow> execute = left.Execute(null);
            foreach (FdoRow leftRow in new EventRaisingEnumerator(left, execute))
            {
                ObjectArrayKeys key = leftRow.CreateKey(leftColumns);
                List<FdoRow> rightRows;
                if (this.rightRowsByJoinKey.TryGetValue(key, out rightRows))
                {
                    foreach (FdoRow rightRow in rightRows)
                    {
                        rightRowsWereMatched[rightRow] = null;
                        yield return MergeRows(leftRow, rightRow);
                    }
                }
                else if ((jointype & JoinType.Left) != 0)
                {
                    FdoRow emptyRow = new FdoRow();
                    yield return MergeRows(leftRow, emptyRow);
                }
                else
                {
                    LeftOrphanRow(leftRow);
                }
            }
            foreach (FdoRow rightRow in rightEnumerable)
            {
                if (rightRowsWereMatched.ContainsKey(rightRow))
                    continue;
                FdoRow emptyRow = new FdoRow();
                if ((jointype & JoinType.Right) != 0)
                    yield return MergeRows(emptyRow, rightRow);
                else
                    RightOrphanRow(rightRow);
            }
        }
Ejemplo n.º 33
0
        private void PrepareSqlTemplate(FdoRow obj)
        {
            _propertyTraversalList = new List<string>();
            if (IsUsingPropertyMappings())
            {
                List<string> columns = new List<string>();
                foreach (string name in _mappings.Keys)
                {
                    columns.Add(name);
                }
                _sqlTpl = "INSERT INTO " + GetTableName() + " (" + QUALIFIER_BEGIN + string.Join(QUALIFIER_END + ", " + QUALIFIER_BEGIN, columns.ToArray());
                _sqlTpl += QUALIFIER_END + ") VALUES (";

                List<string> fmtValues = new List<string>();
                for (int i = 0; i < _mappings.Count; i++)
                {
                    fmtValues.Add("{" + i + "}");
                }
                _sqlTpl += string.Join(",", fmtValues.ToArray()) + ")";
            }
            else
            {
                foreach (string name in obj.Keys)
                {
                    _propertyTraversalList.Add(name);
                }
                _sqlTpl = "INSERT INTO " + GetTableName() + " (" + QUALIFIER_BEGIN + string.Join (QUALIFIER_END + ", " + QUALIFIER_BEGIN, _propertyTraversalList.ToArray());
                _sqlTpl += QUALIFIER_END + ") VALUES (";

                List<string> fmtValues = new List<string>();
                for (int i = 0; i < _propertyTraversalList.Count; i++)
                {
                    fmtValues.Add("{" + i + "}");
                }
                _sqlTpl += string.Join(",", fmtValues.ToArray()) + ")";
            }
        }
Ejemplo n.º 34
0
 /// <summary>
 /// Raises the OnFeatureProcessed event
 /// </summary>
 /// <param name="row"></param>
 public void RaiseFeatureProcessed(FdoRow row)
 {
     Statistics.MarkFeatureProcessed();
     OnFeatureProcessed(this, row);
 }
Ejemplo n.º 35
0
        private void Bind(FdoRow row)
        {
            //Set all property values to null and then set the proper values
            foreach (string propName in currentValues.Keys)
            {
                //Get the [target] property name. If reverse-mapped to the [source], use the 
                //mapped [source] property name. Otherwise it is assumed that [source] name
                //is the same as the [target] name
                string name = propName;
                if (_mappings[name] != null)
                    name = _mappings[name];

                LiteralValue lVal = currentValues[propName] as LiteralValue;
                if (lVal.LiteralValueType == LiteralValueType.LiteralValueType_Data)
                {
                    DataValue dVal = lVal as DataValue;
                    dVal.SetNull();

                    switch (dVal.DataType)
                    {
                        case DataType.DataType_BLOB:
                            {
                                byte [] blob = row[name] as byte[];
                                if(blob != null)
                                {
                                    (dVal as BLOBValue).Data = blob;
                                }
                            }
                            break;
                        case DataType.DataType_Boolean:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as BooleanValue).Boolean = Convert.ToBoolean(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_Byte:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as ByteValue).Byte = Convert.ToByte(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_CLOB:
                            {
                                byte[] clob = row[name] as byte[];
                                if (clob != null)
                                {
                                    (dVal as CLOBValue).Data = clob;
                                }
                            }
                            break;
                        case DataType.DataType_DateTime:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as DateTimeValue).DateTime = Convert.ToDateTime(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_Decimal:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as DecimalValue).Decimal = Convert.ToDouble(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_Double:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as DoubleValue).Double = Convert.ToDouble(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_Int16:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as Int16Value).Int16 = Convert.ToInt16(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_Int32:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as Int32Value).Int32 = Convert.ToInt32(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_Int64:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as Int64Value).Int64 = Convert.ToInt64(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_Single:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as SingleValue).Single = Convert.ToSingle(row[name]);
                                }
                            }
                            break;
                        case DataType.DataType_String:
                            {
                                if (row[name] != null)
                                {
                                    (dVal as StringValue).String = row[name].ToString();
                                }
                            }
                            break;
                    }
                }
                else
                {
                    GeometryValue gVal = lVal as GeometryValue;
                    gVal.SetNull();

                    IGeometry geom = row[name] as IGeometry;
                    if (geom != null)
                    {
                        IGeometry origGeom = geom;
                        //HACK: Just for you SQL Server 2008! 
                        if (geom.DerivedType == OSGeo.FDO.Common.GeometryType.GeometryType_Polygon ||
                            geom.DerivedType == OSGeo.FDO.Common.GeometryType.GeometryType_CurvePolygon ||
                            geom.DerivedType == OSGeo.FDO.Common.GeometryType.GeometryType_MultiCurvePolygon ||
                            geom.DerivedType == OSGeo.FDO.Common.GeometryType.GeometryType_MultiPolygon)
                        {
                            if (_conn.Provider.ToUpper().StartsWith("OSGEO.SQLSERVERSPATIAL"))
                            {
                                //This isn't the most optimal way, as the most optimal
                                //method according to RFC48 is to get the source rule and
                                //strictness and pass that to SpatialUtility.GetPolygonVertexOrderAction()
                                //along with the target rule and strictness. I don't think warping the
                                //existing API to address such a provider-specific corner case is worth it.
                                var caps = _clsDef.Capabilities;
                                var rule = caps.get_PolygonVertexOrderRule(name);
                                geom = SpatialUtility.FixPolygonVertexOrder(origGeom, rule);
                            }
                        }

                        if (geom != null)
                            gVal.Geometry = FdoGeometryFactory.Instance.GetFgf(geom);
                        else
                            gVal.Geometry = FdoGeometryFactory.Instance.GetFgf(origGeom);
                    }
                }
            }
        }
Ejemplo n.º 36
0
 /// <summary>
 /// Raises the OnFeatureFailed event
 /// </summary>
 /// <param name="row"></param>
 /// <param name="ex"></param>
 public void RaiseFailedFeatureProcessed(FdoRow row, Exception ex)
 {
     Statistics.MarkFeatureFailed();
     this.Error(ex, "Error encountered processing feature: {0}", row.ToString());
     OnFeatureFailed(this, row, ex);
 }