Beispiel #1
0
 public DB2SpatialExtenderExpressionTreeToSqlCompiler(DB2SpatialExtenderProvider <TOid> provider,
                                                      Expression query
                                                      )
     : base(provider, query)
 {
 }
        public static void CreateDataTable <TOid>(
            FeatureDataTable featureDataTable,
            String tableName,
            String connectionString,
            String geometryColumnName,
            OgcGeometryType geometryType,
            Double smallRasterSize, Double mediumRasterSize, Double largeRasterSize
            )
        {
            DB2Connection conn = new DB2Connection(connectionString);

            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }

            string srid = featureDataTable.GeometryFactory.Srid ?? DefaultSrid;

            if (conn != null)
            {
                try
                {
                    string createTableClause = string.Format("CREATE TABLE \"{0}\".\"{1}\" ({2});",
                                                             DefaultSpatialSchema,
                                                             tableName,
                                                             ColumnsClause(featureDataTable.Columns,
                                                                           featureDataTable.Constraints));

                    new DB2Command(createTableClause, conn).ExecuteNonQuery();

                    new DB2Command(string.Format("ALTER TABLE \"{0}\".\"{1}\" ADD COLUMN \"{2}\" \"{0}\".{3};",
                                                 DefaultSpatialSchema, tableName, geometryColumnName,
                                                 ToDb2GeometryType(geometryType)), conn).ExecuteNonQuery();

                    Object db2crsname = new DB2Command(String.Format(
                                                           @"SELECT DISTINCT SPATIAL_REF_SYS.CS_NAME
   FROM ""{0}"".""SPATIAL_REF_SYS"" AS SPATIAL_REF_SYS
   WHERE SPATIAL_REF_SYS.AUTH_SRID = {1};",
                                                           DefaultSpatialSchema,
                                                           srid),
                                                       conn).ExecuteScalar();

                    if (db2crsname == null || db2crsname == DBNull.Value || ((String)db2crsname).Length == 0)
                    {
                        db2crsname = "DEFAULT_SRS";
                    }

                    //register spatial column
                    DB2Command cmd =
                        new DB2Command(String.Format("CALL \"{0}\".ST_REGISTER_SPATIAL_COLUMN(?,?,?,?,?,?);",
                                                     DefaultSpatialSchema),
                                       conn);
                    //cmd.CommandType = CommandType.StoredProcedure;

                    //input parameters
                    //DB2Parameter par;
                    DB2Parameter par1 = cmd.Parameters.Add(new DB2Parameter("@P1", DB2Type.VarChar, 130));
                    par1.Value = "\"" + DefaultSpatialSchema + "\"";
                    DB2Parameter par2 = cmd.Parameters.Add(new DB2Parameter("@P2", DB2Type.VarChar, 130));
                    par2.Value = "\"" + tableName + "\"";
                    DB2Parameter par3 = cmd.Parameters.Add(new DB2Parameter("@P3", DB2Type.VarChar, 130));
                    par3.Value = "\"" + geometryColumnName + "\"";
                    DB2Parameter par4 = cmd.Parameters.Add(new DB2Parameter("@P4", DB2Type.VarChar, 130));
                    par4.Value = "\"" + db2crsname + "\"";

                    //output parameters
                    DB2Parameter par5 = cmd.Parameters.Add(new DB2Parameter("@P5", DB2Type.Integer, 4));
                    par5.Direction = ParameterDirection.Output;
                    DB2Parameter par6 = cmd.Parameters.Add(new DB2Parameter("@P6", DB2Type.VarChar, 1024));
                    par6.Direction = ParameterDirection.Output;

                    cmd.ExecuteNonQuery();

                    if (smallRasterSize != -1d)
                    {
                        //adding spatial index
                        new DB2Command(
                            String.Format(
                                "CREATE INDEX \"{0}\".\"idx_{1}_{2}\" ON \"{0}\".\"{1}\"(\"{2}\") EXTEND USING \"{0}\".({3}, {4}, {5});",
                                DefaultSpatialSchema,
                                tableName,
                                geometryColumnName,
                                smallRasterSize, mediumRasterSize, largeRasterSize),
                            conn).ExecuteNonQuery();
                    }
                }
                catch (DB2Exception ex)
                {
                    Trace.Write(ex.Message);
                    //throw new DB2SpatialExtenderException(string.Format("Cannot create geometry column with type of '{0}'", geometryType.ToString()));
                }
                catch
                {
                }
            }
            conn.Close();
            conn = null;

            DB2SpatialExtenderProvider <TOid> prov = new DB2SpatialExtenderProvider <TOid>(
                featureDataTable.GeometryFactory, connectionString, DefaultSpatialSchema, tableName,
                featureDataTable.Columns[0].ColumnName, geometryColumnName);

            prov.Insert(featureDataTable);

            return;
        }