Check-in [3f66bb1c19]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Implementing SE_AutoRegisterStandardBrushes()
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 3f66bb1c1993d273cec3a83e987e939064d1d00e
User & Date: sandro 2020-07-10 06:17:47
Context
2020-07-14
18:51
updating spatial_ref_sys definions to Proj-.7.1 and GDAL-3.1.2 level check-in: 6ff985cfa7 user: sandro tags: trunk
2020-07-10
06:17
Implementing SE_AutoRegisterStandardBrushes() check-in: 3f66bb1c19 user: sandro tags: trunk
2020-07-03
17:49
removing SLD/SE *group* support check-in: f9d9d8e140 user: sandro tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to spatialite-sql-latest.html.

3839
3840
3841
3842
3843
3844
3845






3846
3847
3848
3849
3850
3851
3852
				<td align="center" bgcolor="#99d099">libxml2</td>
				<td>Removes an already defined <b>keyword</b> from a Vector Coverage.
				<ul>
					<li><b>coverage_name</b> and <b>keyword</b> must identify some previously defined keyword.</li>
				</ul><hr>
the return type is Integer, with a return value of 1 for TRUE (success) or 0 for FALSE (failure): -1 will be
				returned on invalid arguments.</td></tr>






		<tr><td><b>SE_RegisterExternalGraphic</b></td>
				<td>SE_RegisterExternalGraphic( xlink_href <i>String</i> , resource <i>BLOB</i> ) : <i>Integer</i><hr>
					SE_RegisterExternalGraphic( xlink_href <i>String</i> , resource <i>BLOB</i> , title <i>String</i> , abstract <i>String</i> , file_name <i>String</i> ) : <i>Integer</i></td>
				<td></td>
				<td align="center" bgcolor="#99d099">libxml2</td>
				<td>Inserts (or updates) an <b>External Graphic Resource</b>.
				<ul>







>
>
>
>
>
>







3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
				<td align="center" bgcolor="#99d099">libxml2</td>
				<td>Removes an already defined <b>keyword</b> from a Vector Coverage.
				<ul>
					<li><b>coverage_name</b> and <b>keyword</b> must identify some previously defined keyword.</li>
				</ul><hr>
the return type is Integer, with a return value of 1 for TRUE (success) or 0 for FALSE (failure): -1 will be
				returned on invalid arguments.</td></tr>
		<tr><td><b>SE_AutoRegisterStandardBrushes</b></td>
				<td>SE_AutoRegisterStandardBrushes( ) : <i>NULL</i></td>
				<td></td>
				<td align="center" bgcolor="#99d099">libxml2</td>
				<td>Inserts all <b>Graphic Standard Brushes</b> supported by RasterLite2 (if not already inserted).<br>
				Will be automatically invoked by <b>CreateStylingTables()</b>.</td></tr>
		<tr><td><b>SE_RegisterExternalGraphic</b></td>
				<td>SE_RegisterExternalGraphic( xlink_href <i>String</i> , resource <i>BLOB</i> ) : <i>Integer</i><hr>
					SE_RegisterExternalGraphic( xlink_href <i>String</i> , resource <i>BLOB</i> , title <i>String</i> , abstract <i>String</i> , file_name <i>String</i> ) : <i>Integer</i></td>
				<td></td>
				<td align="center" bgcolor="#99d099">libxml2</td>
				<td>Inserts (or updates) an <b>External Graphic Resource</b>.
				<ul>

Changes to src/spatialite/dbobj_scopes.c.

2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
....
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
....
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
....
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
	  *sys_scope = sqlite3_mprintf ("Raster/Vector Coverages Auxiliary");
	  return 1;
      }
    if (strcasecmp (tbl_name, "SE_external_graphics") == 0
	|| strcasecmp (tbl_name, "SE_fonts") == 0
	|| strcasecmp (tbl_name, "SE_vector_styles") == 0
	|| strcasecmp (tbl_name, "SE_raster_styles") == 0
	|| strcasecmp (tbl_name, "SE_group_styles") == 0
	|| strcasecmp (tbl_name, "SE_vector_styled_layers") == 0
	|| strcasecmp (tbl_name, "SE_vector_styled_layers") == 0
	|| strcasecmp (tbl_name, "SE_raster_styled_layers") == 0
	|| strcasecmp (tbl_name, "SE_styled_groups") == 0
	|| strcasecmp (tbl_name, "SE_styled_group_refs") == 0
	|| strcasecmp (tbl_name, "SE_styled_group_styles") == 0)
      {
	  *sys_scope = sqlite3_mprintf ("SLD/SE Styling");
	  return 1;
      }
    if (strcasecmp (tbl_name, "topologies") == 0)
      {
	  *sys_scope = sqlite3_mprintf ("Topologies Catalog");
................................................................................
      }
    if (strcasecmp (tbl_name, "SE_external_graphics_view") == 0
	|| strcasecmp (tbl_name, "SE_fonts_view") == 0
	|| strcasecmp (tbl_name, "SE_vector_styles_view") == 0
	|| strcasecmp (tbl_name, "SE_raster_styles_view") == 0
	|| strcasecmp (tbl_name, "SE_vector_styled_layers_view") == 0
	|| strcasecmp (tbl_name, "SE_raster_styled_layers_view") == 0
	|| strcasecmp (tbl_name, "SE_styled_groups_view") == 0
	|| strcasecmp (tbl_name, "SE_group_styles_view") == 0)
      {
	  *sys_scope = sqlite3_mprintf ("SLD/SE Styling");
	  return 1;
      }
    if (strcasecmp (tbl_name, "ISO_metadata_view") == 0)
      {
	  *sys_scope = sqlite3_mprintf ("ISO Metadata Component");
................................................................................
	|| strcasecmp (tbl_name, "idx_serstl_style") == 0)
	return 1;
    if (strcasecmp (tbl_name, "idx_ISO_metadata_ids") == 0
	|| strcasecmp (tbl_name, "idx_ISO_metadata_parents") == 0
	|| strcasecmp (tbl_name, "idx_ISO_metadata_reference_ids") == 0
	|| strcasecmp (tbl_name, "idx_ISO_metadata_reference_parents") == 0)
	return 1;
    if (strcasecmp (tbl_name, "idx_SE_styled_vgroups") == 0
	|| strcasecmp (tbl_name, "idx_SE_styled_rgroups") == 0
	|| strcasecmp (tbl_name, "idx_SE_styled_groups_paint") == 0)
	return 1;
    if (strcasecmp (tbl_name, "idx_vector_coverages") == 0
	|| strcasecmp (tbl_name, "idx_wms_getcapabilities") == 0
	|| strcasecmp (tbl_name, "idx_wms_getmap") == 0
	|| strcasecmp (tbl_name, "idx_wms_settings") == 0
	|| strcasecmp (tbl_name, "idx_wms_ref_sys") == 0)
	return 1;
    return 0;
................................................................................
	|| strcasecmp (tbl_name, "sevector_style_name_ins") == 0
	|| strcasecmp (tbl_name, "sevector_style_name_upd") == 0
	|| strcasecmp (tbl_name, "seraster_style_insert") == 0
	|| strcasecmp (tbl_name, "seraster_style_update") == 0
	|| strcasecmp (tbl_name, "seraster_style_name_ins") == 0
	|| strcasecmp (tbl_name, "seraster_style_name_upd") == 0)
	return 1;
    if (strcasecmp (tbl_name, "segroup_style_insert") == 0
	|| strcasecmp (tbl_name, "segroup_style_update") == 0
	|| strcasecmp (tbl_name, "segroup_style_name_ins") == 0
	|| strcasecmp (tbl_name, "segroup_style_name_upd") == 0)
	return 1;
    if (strcasecmp (tbl_name, "sevstl_coverage_name_insert") == 0
	|| strcasecmp (tbl_name, "sevstl_coverage_name_update") == 0
	|| strcasecmp (tbl_name, "serstl_coverage_name_insert") == 0
	|| strcasecmp (tbl_name, "serstl_coverage_name_update") == 0
	|| strcasecmp (tbl_name, "segrp_group_name_insert") == 0
	|| strcasecmp (tbl_name, "segrp_group_name_update") == 0)
	return 1;
    if (strcasecmp (tbl_name, "segrrefs_group_name_insert") == 0
	|| strcasecmp (tbl_name, "segrrefs_group_name_update") == 0
	|| strcasecmp (tbl_name, "segrrefs_vector_coverage_name_insert") == 0
	|| strcasecmp (tbl_name, "segrrefs_vector_coverage_name_update") == 0
	|| strcasecmp (tbl_name, "segrrefs_raster_coverage_name_insert") == 0
	|| strcasecmp (tbl_name, "segrrefs_raster_coverage_name_update") == 0
	|| strcasecmp (tbl_name, "segrrefs_insert_1") == 0
	|| strcasecmp (tbl_name, "segrrefs_update_1") == 0
	|| strcasecmp (tbl_name, "segrrefs_insert_2") == 0
	|| strcasecmp (tbl_name, "segrrefs_update_2") == 0)
	return 1;
    if (strcasecmp (tbl_name, "segrpstl_group_name_insert") == 0
	|| strcasecmp (tbl_name, "segrpstl_group_name_update") == 0
	|| strcasecmp (tbl_name, "storproc_ins") == 0
	|| strcasecmp (tbl_name, "storproc_upd") == 0)
	return 1;
    if (strcasecmp (tbl_name, "ISO_metadata_md_scope_insert") == 0
	|| strcasecmp (tbl_name, "ISO_metadata_md_scope_update") == 0
	|| strcasecmp (tbl_name, "ISO_metadata_fileIdentifier_insert") == 0
	|| strcasecmp (tbl_name, "ISO_metadata_fileIdentifier_update") == 0
	|| strcasecmp (tbl_name, "ISO_metadata_insert") == 0







<



|
<
<







 







|
<







 







<
<
<
<







 







|
|
|
|




|
<
<

<
<
|








<
<
|







2203
2204
2205
2206
2207
2208
2209

2210
2211
2212
2213


2214
2215
2216
2217
2218
2219
2220
....
2287
2288
2289
2290
2291
2292
2293
2294

2295
2296
2297
2298
2299
2300
2301
....
2319
2320
2321
2322
2323
2324
2325




2326
2327
2328
2329
2330
2331
2332
....
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532


2533


2534
2535
2536
2537
2538
2539
2540
2541
2542


2543
2544
2545
2546
2547
2548
2549
2550
	  *sys_scope = sqlite3_mprintf ("Raster/Vector Coverages Auxiliary");
	  return 1;
      }
    if (strcasecmp (tbl_name, "SE_external_graphics") == 0
	|| strcasecmp (tbl_name, "SE_fonts") == 0
	|| strcasecmp (tbl_name, "SE_vector_styles") == 0
	|| strcasecmp (tbl_name, "SE_raster_styles") == 0

	|| strcasecmp (tbl_name, "SE_vector_styled_layers") == 0
	|| strcasecmp (tbl_name, "SE_vector_styled_layers") == 0
	|| strcasecmp (tbl_name, "SE_raster_styled_layers") == 0
	|| strcasecmp (tbl_name, "rl2map_configurations") == 0)


      {
	  *sys_scope = sqlite3_mprintf ("SLD/SE Styling");
	  return 1;
      }
    if (strcasecmp (tbl_name, "topologies") == 0)
      {
	  *sys_scope = sqlite3_mprintf ("Topologies Catalog");
................................................................................
      }
    if (strcasecmp (tbl_name, "SE_external_graphics_view") == 0
	|| strcasecmp (tbl_name, "SE_fonts_view") == 0
	|| strcasecmp (tbl_name, "SE_vector_styles_view") == 0
	|| strcasecmp (tbl_name, "SE_raster_styles_view") == 0
	|| strcasecmp (tbl_name, "SE_vector_styled_layers_view") == 0
	|| strcasecmp (tbl_name, "SE_raster_styled_layers_view") == 0
	|| strcasecmp (tbl_name, "rl2map_configurations") == 0)

      {
	  *sys_scope = sqlite3_mprintf ("SLD/SE Styling");
	  return 1;
      }
    if (strcasecmp (tbl_name, "ISO_metadata_view") == 0)
      {
	  *sys_scope = sqlite3_mprintf ("ISO Metadata Component");
................................................................................
	|| strcasecmp (tbl_name, "idx_serstl_style") == 0)
	return 1;
    if (strcasecmp (tbl_name, "idx_ISO_metadata_ids") == 0
	|| strcasecmp (tbl_name, "idx_ISO_metadata_parents") == 0
	|| strcasecmp (tbl_name, "idx_ISO_metadata_reference_ids") == 0
	|| strcasecmp (tbl_name, "idx_ISO_metadata_reference_parents") == 0)
	return 1;




    if (strcasecmp (tbl_name, "idx_vector_coverages") == 0
	|| strcasecmp (tbl_name, "idx_wms_getcapabilities") == 0
	|| strcasecmp (tbl_name, "idx_wms_getmap") == 0
	|| strcasecmp (tbl_name, "idx_wms_settings") == 0
	|| strcasecmp (tbl_name, "idx_wms_ref_sys") == 0)
	return 1;
    return 0;
................................................................................
	|| strcasecmp (tbl_name, "sevector_style_name_ins") == 0
	|| strcasecmp (tbl_name, "sevector_style_name_upd") == 0
	|| strcasecmp (tbl_name, "seraster_style_insert") == 0
	|| strcasecmp (tbl_name, "seraster_style_update") == 0
	|| strcasecmp (tbl_name, "seraster_style_name_ins") == 0
	|| strcasecmp (tbl_name, "seraster_style_name_upd") == 0)
	return 1;
    if (strcasecmp (tbl_name, "rl2map_config_insert") == 0
	|| strcasecmp (tbl_name, "rl2map_config_update") == 0
	|| strcasecmp (tbl_name, "rl2map_config_name_ins") == 0
	|| strcasecmp (tbl_name, "rl2map_config_name_upd") == 0)
	return 1;
    if (strcasecmp (tbl_name, "sevstl_coverage_name_insert") == 0
	|| strcasecmp (tbl_name, "sevstl_coverage_name_update") == 0
	|| strcasecmp (tbl_name, "serstl_coverage_name_insert") == 0
	|| strcasecmp (tbl_name, "serstl_coverage_name_update") == 0)


	return 1;


    if (strcasecmp (tbl_name, "segrrefs_vector_coverage_name_insert") == 0
	|| strcasecmp (tbl_name, "segrrefs_vector_coverage_name_update") == 0
	|| strcasecmp (tbl_name, "segrrefs_raster_coverage_name_insert") == 0
	|| strcasecmp (tbl_name, "segrrefs_raster_coverage_name_update") == 0
	|| strcasecmp (tbl_name, "segrrefs_insert_1") == 0
	|| strcasecmp (tbl_name, "segrrefs_update_1") == 0
	|| strcasecmp (tbl_name, "segrrefs_insert_2") == 0
	|| strcasecmp (tbl_name, "segrrefs_update_2") == 0)
	return 1;


    if (strcasecmp (tbl_name, "storproc_ins") == 0
	|| strcasecmp (tbl_name, "storproc_upd") == 0)
	return 1;
    if (strcasecmp (tbl_name, "ISO_metadata_md_scope_insert") == 0
	|| strcasecmp (tbl_name, "ISO_metadata_md_scope_update") == 0
	|| strcasecmp (tbl_name, "ISO_metadata_fileIdentifier_insert") == 0
	|| strcasecmp (tbl_name, "ISO_metadata_fileIdentifier_update") == 0
	|| strcasecmp (tbl_name, "ISO_metadata_insert") == 0

Changes to src/spatialite/extra_tables.c.

3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
....
4183
4184
4185
4186
4187
4188
4189




















4190
4191
4192
4193
4194
4195
4196
....
4307
4308
4309
4310
4311
4312
4313


4314
4315
4316
4317
4318
4319
4320
    int columns;
    int i;

/* checking for existing tables */
    sql =
	"SELECT name FROM sqlite_master WHERE type = 'trigger' AND tbl_name "
	"IN ('SE_external_graphics', 'SE_fonts', 'SE_vector_styles', 'SE_raster_styles', "
	"'SE_group_styles', 'SE_vector_styled_layers', 'SE_raster_styled_layers', "
	"'SE_styled_groups', 'SE_styled_group_refs', 'SE_styled_group_styles')";
    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK)
      {
	  spatialite_e ("SQL error: %s\n", err_msg);
	  sqlite3_free (err_msg);
	  return;
      }
................................................................................
	      ("CREATE VIEW 'SE_vector_styled_layers_view' error: %s\n",
	       err_msg);
	  sqlite3_free (err_msg);
	  return 0;
      }
    return 1;
}





















static int
create_raster_styled_layers_view (sqlite3 * sqlite)
{
/* creating the SE_raster_styled_layers_view view */
    char *sql_statement;
    int ret;
................................................................................
    if (!create_rl2map_configurations (sqlite, relaxed))
	goto error;
    if (!create_vector_styled_layers (sqlite))
	goto error;
    if (!create_raster_styled_layers (sqlite))
	goto error;
    if (!create_external_graphics_view (sqlite))


	goto error;
    if (!create_fonts_view (sqlite))
	goto error;
    if (!create_vector_styles_view (sqlite))
	goto error;
    if (!create_raster_styles_view (sqlite))
	goto error;







|
<







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>







3251
3252
3253
3254
3255
3256
3257
3258

3259
3260
3261
3262
3263
3264
3265
....
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
....
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
    int columns;
    int i;

/* checking for existing tables */
    sql =
	"SELECT name FROM sqlite_master WHERE type = 'trigger' AND tbl_name "
	"IN ('SE_external_graphics', 'SE_fonts', 'SE_vector_styles', 'SE_raster_styles', "
	"'SE_vector_styled_layers', 'SE_raster_styled_layers', 'rl2map_configurations')";

    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK)
      {
	  spatialite_e ("SQL error: %s\n", err_msg);
	  sqlite3_free (err_msg);
	  return;
      }
................................................................................
	      ("CREATE VIEW 'SE_vector_styled_layers_view' error: %s\n",
	       err_msg);
	  sqlite3_free (err_msg);
	  return 0;
      }
    return 1;
}

static int
auto_register_standard_brushes (sqlite3 * sqlite)
{
/* AutoRegistering all Graphic Standard Brushes reguired by RasterLite2 */
    char *sql_statement;
    int ret;
    char *err_msg = NULL;
    sql_statement = sqlite3_mprintf ("SELECT SE_AutoRegisterStandardBrushes()");
    ret = sqlite3_exec (sqlite, sql_statement, NULL, NULL, &err_msg);
    sqlite3_free (sql_statement);
    if (ret != SQLITE_OK)
      {
	  spatialite_e
	      ("SELECT SE_AutoRegisterStandardBrushes() error: %s\n", err_msg);
	  sqlite3_free (err_msg);
	  return 0;
      }
    return 1;
}

static int
create_raster_styled_layers_view (sqlite3 * sqlite)
{
/* creating the SE_raster_styled_layers_view view */
    char *sql_statement;
    int ret;
................................................................................
    if (!create_rl2map_configurations (sqlite, relaxed))
	goto error;
    if (!create_vector_styled_layers (sqlite))
	goto error;
    if (!create_raster_styled_layers (sqlite))
	goto error;
    if (!create_external_graphics_view (sqlite))
	goto error;
    if (!auto_register_standard_brushes (sqlite))
	goto error;
    if (!create_fonts_view (sqlite))
	goto error;
    if (!create_vector_styles_view (sqlite))
	goto error;
    if (!create_raster_styles_view (sqlite))
	goto error;

Changes to src/spatialite/spatialite.c.

24998
24999
25000
25001
25002
25003
25004

25005
25006
25007

25008
25009
25010
25011
25012
25013
25014
25015
.....
25024
25025
25026
25027
25028
25029
25030

25031

25032

25033
25034
25035
25036
25037
25038
25039
25040
.....
26186
26187
26188
26189
26190
26191
26192
26193
26194
26195
26196
26197
26198
26199
26200
26201
26202
26203
26204
.....
40637
40638
40639
40640
40641
40642
40643

40644
40645
40646
40647
40648
40649
40650
40651
.....
40731
40732
40733
40734
40735
40736
40737

40738
40739
40740
40741
40742
40743
40744
40745
40746

40747
40748
40749
40750
40751
40752
40753
40754
.....
41732
41733
41734
41735
41736
41737
41738















































































41739
41740
41741
41742
41743
41744
41745
.....
52284
52285
52286
52287
52288
52289
52290



52291
52292
52293
52294
52295
52296
52297
				  line = geo->FirstLinestring;
				  while (line)
				    {
					/* Linestrings */
					l = gaiaGeodesicTotalLength (a,
								     b,
								     rf,

								     line->
								     DimensionModel,
								     line->Coords,

								     line->Points);
					if (l < 0.0)
					  {
					      length = -1.0;
					      break;
					  }
					length += l;
					line = line->Next;
................................................................................
					while (polyg)
					  {
					      /* exterior Ring */
					      ring = polyg->Exterior;
					      l = gaiaGeodesicTotalLength (a,
									   b,
									   rf,

									   ring->DimensionModel,

									   ring->Coords,

									   ring->Points);
					      if (l < 0.0)
						{
						    length = -1.0;
						    break;
						}
					      length += l;
					      for (ib = 0;
................................................................................
		      break;
		  }

		if (use_ellipsoid >= 0)
		  {
#ifdef ENABLE_RTTOPO		/* only if RTTOPO is enabled */
		      perimeter = gaiaGeodesicTotalLength (a, b, rf,
							   pg->
							   Exterior->DimensionModel,
							   pg->Exterior->Coords,
							   pg->
							   Exterior->Points);
		      if (perimeter < 0.0)
			  ret = 0;
		      else
			  ret = 1;
#else
		      ret = 0;
#endif /* end RTTOPO conditional */
................................................................................
			      }
			    length += l;
			    for (ib = 0; ib < polyg->NumInteriors; ib++)
			      {
				  /* interior Rings */
				  ring = polyg->Interiors + ib;
				  l = gaiaGeodesicTotalLength (a, b, rf,

							       ring->DimensionModel,
							       ring->Coords,
							       ring->Points);
				  if (l < 0.0)
				    {
					length = -1.0;
					break;
				    }
................................................................................
		      polyg = geo->FirstPolygon;
		      while (polyg)
			{
			    /* exterior Ring */
			    ring = polyg->Exterior;
			    length +=
				gaiaGreatCircleTotalLength (a, b,

							    ring->DimensionModel,
							    ring->Coords,
							    ring->Points);
			    for (ib = 0; ib < polyg->NumInteriors; ib++)
			      {
				  /* interior Rings */
				  ring = polyg->Interiors + ib;
				  length +=
				      gaiaGreatCircleTotalLength (a, b,

								  ring->DimensionModel,
								  ring->Coords,
								  ring->Points);
			      }
			    polyg = polyg->Next;
			}
		  }
		sqlite3_result_double (context, length);
................................................................................
    sqlite3_result_int (context, 1);
    return;

  error:
    sqlite3_result_int (context, 0);
    return;
}
















































































static void
fnct_RegisterExternalGraphic (sqlite3_context * context, int argc,
			      sqlite3_value ** argv)
{
/* SQL function:
/ RegisterExternalGraphic(String xlink_href, BLOB resource)
................................................................................
			     0, 0);
    sqlite3_create_function (db, "SE_UpdateVectorCoverageExtent", 1,
			     SQLITE_ANY, 0, fnct_UpdateVectorCoverageExtent,
			     0, 0);
    sqlite3_create_function (db, "SE_UpdateVectorCoverageExtent", 2,
			     SQLITE_ANY, 0, fnct_UpdateVectorCoverageExtent,
			     0, 0);



    sqlite3_create_function_v2 (db, "SE_RegisterExternalGraphic", 2,
				SQLITE_UTF8 | SQLITE_DETERMINISTIC, 0,
				fnct_RegisterExternalGraphic, 0, 0, 0);
    sqlite3_create_function_v2 (db, "SE_RegisterExternalGraphic", 5,
				SQLITE_UTF8 | SQLITE_DETERMINISTIC, 0,
				fnct_RegisterExternalGraphic, 0, 0, 0);
    sqlite3_create_function_v2 (db, "SE_UnregisterExternalGraphic", 1,







>

<
|
>
|







 







>
|
>
|
>
|







 







|
|

|
|







 







>
|







 







>
|








>
|







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>







24998
24999
25000
25001
25002
25003
25004
25005
25006

25007
25008
25009
25010
25011
25012
25013
25014
25015
25016
.....
25025
25026
25027
25028
25029
25030
25031
25032
25033
25034
25035
25036
25037
25038
25039
25040
25041
25042
25043
25044
.....
26190
26191
26192
26193
26194
26195
26196
26197
26198
26199
26200
26201
26202
26203
26204
26205
26206
26207
26208
.....
40641
40642
40643
40644
40645
40646
40647
40648
40649
40650
40651
40652
40653
40654
40655
40656
.....
40736
40737
40738
40739
40740
40741
40742
40743
40744
40745
40746
40747
40748
40749
40750
40751
40752
40753
40754
40755
40756
40757
40758
40759
40760
40761
.....
41739
41740
41741
41742
41743
41744
41745
41746
41747
41748
41749
41750
41751
41752
41753
41754
41755
41756
41757
41758
41759
41760
41761
41762
41763
41764
41765
41766
41767
41768
41769
41770
41771
41772
41773
41774
41775
41776
41777
41778
41779
41780
41781
41782
41783
41784
41785
41786
41787
41788
41789
41790
41791
41792
41793
41794
41795
41796
41797
41798
41799
41800
41801
41802
41803
41804
41805
41806
41807
41808
41809
41810
41811
41812
41813
41814
41815
41816
41817
41818
41819
41820
41821
41822
41823
41824
41825
41826
41827
41828
41829
41830
41831
.....
52370
52371
52372
52373
52374
52375
52376
52377
52378
52379
52380
52381
52382
52383
52384
52385
52386
				  line = geo->FirstLinestring;
				  while (line)
				    {
					/* Linestrings */
					l = gaiaGeodesicTotalLength (a,
								     b,
								     rf,
								     line->DimensionModel,
								     line->

								     Coords,
								     line->
								     Points);
					if (l < 0.0)
					  {
					      length = -1.0;
					      break;
					  }
					length += l;
					line = line->Next;
................................................................................
					while (polyg)
					  {
					      /* exterior Ring */
					      ring = polyg->Exterior;
					      l = gaiaGeodesicTotalLength (a,
									   b,
									   rf,
									   ring->
									   DimensionModel,
									   ring->
									   Coords,
									   ring->
									   Points);
					      if (l < 0.0)
						{
						    length = -1.0;
						    break;
						}
					      length += l;
					      for (ib = 0;
................................................................................
		      break;
		  }

		if (use_ellipsoid >= 0)
		  {
#ifdef ENABLE_RTTOPO		/* only if RTTOPO is enabled */
		      perimeter = gaiaGeodesicTotalLength (a, b, rf,
							   pg->Exterior->
							   DimensionModel,
							   pg->Exterior->Coords,
							   pg->Exterior->
							   Points);
		      if (perimeter < 0.0)
			  ret = 0;
		      else
			  ret = 1;
#else
		      ret = 0;
#endif /* end RTTOPO conditional */
................................................................................
			      }
			    length += l;
			    for (ib = 0; ib < polyg->NumInteriors; ib++)
			      {
				  /* interior Rings */
				  ring = polyg->Interiors + ib;
				  l = gaiaGeodesicTotalLength (a, b, rf,
							       ring->
							       DimensionModel,
							       ring->Coords,
							       ring->Points);
				  if (l < 0.0)
				    {
					length = -1.0;
					break;
				    }
................................................................................
		      polyg = geo->FirstPolygon;
		      while (polyg)
			{
			    /* exterior Ring */
			    ring = polyg->Exterior;
			    length +=
				gaiaGreatCircleTotalLength (a, b,
							    ring->
							    DimensionModel,
							    ring->Coords,
							    ring->Points);
			    for (ib = 0; ib < polyg->NumInteriors; ib++)
			      {
				  /* interior Rings */
				  ring = polyg->Interiors + ib;
				  length +=
				      gaiaGreatCircleTotalLength (a, b,
								  ring->
								  DimensionModel,
								  ring->Coords,
								  ring->Points);
			      }
			    polyg = polyg->Next;
			}
		  }
		sqlite3_result_double (context, length);
................................................................................
    sqlite3_result_int (context, 1);
    return;

  error:
    sqlite3_result_int (context, 0);
    return;
}

static void
fnct_AutoRegisterStandardBrushes (sqlite3_context * context, int argc,
				  sqlite3_value ** argv)
{
/* SQL function:
/ AutoRegisterStandardBrushes()
/
/ insert all Standard Brushes
/ returns NULL
*/
    char *sql;
    sqlite3 *sqlite = sqlite3_context_db_handle (context);
    GAIA_UNUSED ();		/* LCOV_EXCL_LINE */
/* standard HORZ brush */
    sql = sqlite3_mprintf ("INSERT OR IGNORE INTO main.SE_external_graphics "
			   "(xlink_href, title, abstract, resource, file_name) VALUES (%Q, %Q, %Q, %s, %Q)",
			   "http://www.utopia.gov/stdbrush_horz.png",
			   "stdbrush_horz", "PNG icon: 16 X 16",
			   "x'89504E470D0A1A0A0000000D4948445200000010000000100103000000253D6D2200000006504C5445000000000000A567B9CF0000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507E2071F052A0AA4776C2D0000001D69545874436F6D6D656E7400000000004372656174656420776974682047494D50642E6507000000114944415408D76360C006FEFF07216C00005FD003FD0222B80F0000000049454E44AE426082'",
			   "stdbrush_horz.png");
    sqlite3_exec (sqlite, sql, NULL, NULL, NULL);
    sqlite3_free (sql);
/* standard VERT brush */
    sql = sqlite3_mprintf ("INSERT OR IGNORE INTO main.SE_external_graphics "
			   "(xlink_href, title, abstract, resource, file_name) VALUES (%Q, %Q, %Q, %s, %Q)",
			   "http://www.utopia.gov/stdbrush_vert.png",
			   "stdbrush_vert", "PNG icon: 16 X 16",
			   "x'89504E470D0A1A0A0000000D4948445200000010000000100103000000253D6D2200000006504C5445000000000000A567B9CF0000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507E2071F052C140822F6C80000001D69545874436F6D6D656E7400000000004372656174656420776974682047494D50642E65070000000E4944415408D763606C6020050100BDB80811166C49120000000049454E44AE426082'",
			   "stdbrush_vert.png");
    sqlite3_exec (sqlite, sql, NULL, NULL, NULL);
    sqlite3_free (sql);
/* standard CROSS brush */
    sql = sqlite3_mprintf ("INSERT OR IGNORE INTO main.SE_external_graphics "
			   "(xlink_href, title, abstract, resource, file_name) VALUES (%Q, %Q, %Q, %s, %Q)",
			   "http://www.utopia.gov/stdbrush_cross.png",
			   "stdbrush_cross", "PNG icon: 16 X 16",
			   "x'89504E470D0A1A0A0000000D4948445200000010000000100103000000253D6D2200000006504C5445000000000000A567B9CF0000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507E2071F052B2111D0A42C0000001D69545874436F6D6D656E7400000000004372656174656420776974682047494D50642E6507000000134944415408D763606C60C044FFFF831036290005B60B0B55E3F2160000000049454E44AE426082'",
			   "stdbrush_horz.png");
    sqlite3_exec (sqlite, sql, NULL, NULL, NULL);
    sqlite3_free (sql);
/* standard DIAG1 brush */
    sql = sqlite3_mprintf ("INSERT OR IGNORE INTO main.SE_external_graphics "
			   "(xlink_href, title, abstract, resource, file_name) VALUES (%Q, %Q, %Q, %s, %Q)",
			   "http://www.utopia.gov/stdbrush_diag1.png",
			   "stdbrush_diag1", "PNG icon: 16 X 16",
			   "x'89504E470D0A1A0A0000000D4948445200000010000000100103000000253D6D2200000006504C5445000000000000A567B9CF0000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507E2071F053A2AD5DB5EB40000001D69545874436F6D6D656E7400000000004372656174656420776974682047494D50642E6507000000284944415408D76338C0C8F08081A18081C18281418681818F81819D8181B98181F10003A644033300A53305FB13D67A660000000049454E44AE426082'",
			   "stdbrush_diag1.png");
    sqlite3_exec (sqlite, sql, NULL, NULL, NULL);
    sqlite3_free (sql);
/* standard DIAG2 brush */
    sql = sqlite3_mprintf ("INSERT OR IGNORE INTO main.SE_external_graphics "
			   "(xlink_href, title, abstract, resource, file_name) VALUES (%Q, %Q, %Q, %s, %Q)",
			   "http://www.utopia.gov/stdbrush_diag2.png",
			   "stdbrush_diag2", "PNG icon: 16 X 16",
			   "x'89504E470D0A1A0A0000000D4948445200000010000000100103000000253D6D2200000006504C5445000000000000A567B9CF0000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507E2071F060413C95D73980000001D69545874436F6D6D656E7400000000004372656174656420776974682047494D50642E6507000000284944415408D76368606660606760E06360906160B0606028606078C0C0788081B9015398E10023007A0D05FB2ED2A2EB0000000049454E44AE426082'",
			   "stdbrush_diag2.png");
    sqlite3_exec (sqlite, sql, NULL, NULL, NULL);
    sqlite3_free (sql);
/* standard CROSSDIAG brush */
    sql = sqlite3_mprintf ("INSERT OR IGNORE INTO main.SE_external_graphics "
			   "(xlink_href, title, abstract, resource, file_name) VALUES (%Q, %Q, %Q, %s, %Q)",
			   "http://www.utopia.gov/stdbrush_crossdiag.png",
			   "stdbrush_crossdiag", "PNG icon: 16 X 16",
			   "x'89504E470D0A1A0A0000000D4948445200000010000000100103000000253D6D2200000006504C5445000000000000A567B9CF0000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507E2071F060233A469F4D60000001D69545874436F6D6D656E7400000000004372656174656420776974682047494D50642E65070000002F4944415408D76338C0CCF0809DA1808FC1428641C68281AF8081FD0103F301100232805CA020500AA800A8EC003300EEB009F1542AF56B0000000049454E44AE426082'",
			   "stdbrush_crossdiag.png");
    sqlite3_exec (sqlite, sql, NULL, NULL, NULL);
    sqlite3_free (sql);
// standard DOTS brush
    sql = sqlite3_mprintf ("INSERT OR IGNORE INTO main.SE_external_graphics "
			   "(xlink_href, title, abstract, resource, file_name) VALUES (%Q, %Q, %Q, %s, %Q)",
			   "http://www.utopia.gov/stdbrush_dots.png",
			   "stdbrush_dots", "PNG icon: 16 X 16",
			   "x'89504E470D0A1A0A0000000D4948445200000010000000100103000000253D6D2200000006504C5445000000000000A567B9CF0000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507E2071F061A20A2CC2D510000001D69545874436F6D6D656E7400000000004372656174656420776974682047494D50642E65070000001F4944415408D76338C0CCD0C0C8800C181B18980F801090810C80CA0E30030079B00511EB64F1C50000000049454E44AE426082'",
			   "stdbrush_dots.png");
    sqlite3_exec (sqlite, sql, NULL, NULL, NULL);
    sqlite3_free (sql);
    sqlite3_result_null (context);
}

static void
fnct_RegisterExternalGraphic (sqlite3_context * context, int argc,
			      sqlite3_value ** argv)
{
/* SQL function:
/ RegisterExternalGraphic(String xlink_href, BLOB resource)
................................................................................
			     0, 0);
    sqlite3_create_function (db, "SE_UpdateVectorCoverageExtent", 1,
			     SQLITE_ANY, 0, fnct_UpdateVectorCoverageExtent,
			     0, 0);
    sqlite3_create_function (db, "SE_UpdateVectorCoverageExtent", 2,
			     SQLITE_ANY, 0, fnct_UpdateVectorCoverageExtent,
			     0, 0);
    sqlite3_create_function_v2 (db, "SE_AutoRegisterStandardBrushes", 0,
				SQLITE_UTF8 | SQLITE_DETERMINISTIC, 0,
				fnct_AutoRegisterStandardBrushes, 0, 0, 0);
    sqlite3_create_function_v2 (db, "SE_RegisterExternalGraphic", 2,
				SQLITE_UTF8 | SQLITE_DETERMINISTIC, 0,
				fnct_RegisterExternalGraphic, 0, 0, 0);
    sqlite3_create_function_v2 (db, "SE_RegisterExternalGraphic", 5,
				SQLITE_UTF8 | SQLITE_DETERMINISTIC, 0,
				fnct_RegisterExternalGraphic, 0, 0, 0);
    sqlite3_create_function_v2 (db, "SE_UnregisterExternalGraphic", 1,

Changes to src/spatialite/statistics.c.

5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
....
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
    return 0;
}

static int
check_spatialite_table (const char *table)
{
/*
// Note: sqlite3 prevents 'sqlite_master' from being droped [will not list itsself, returns 'not existing table']
// checking for SpatiaLite / RasterLite2 internal tables 
*/
    if (strcasecmp (table, "data_licenses") == 0)
	return 1;
    if (strcasecmp (table, "geometry_columns") == 0)
	return 1;
    if (strcasecmp (table, "geometry_columns_time") == 0)
................................................................................
	return 1;
    if (strcasecmp (table, "virts_geometry_columns_statistics") == 0)
	return 1;
    if (strcasecmp (table, "SE_external_graphics") == 0)
	return 1;
    if (strcasecmp (table, "SE_fonts") == 0)
	return 1;
    if (strcasecmp (table, "SE_group_styles") == 0)
	return 1;
    if (strcasecmp (table, "SE_raster_styled_layers") == 0)
	return 1;
    if (strcasecmp (table, "SE_styled_group_refs") == 0)
	return 1;
    if (strcasecmp (table, "SE_vector_styled_layers") == 0)
	return 1;
    if (strcasecmp (table, "SE_vector_styles") == 0)
	return 1;
    if (strcasecmp (table, "iso_metadata") == 0)
	return 1;
    if (strcasecmp (table, "iso_metadata_reference") == 0)







|







 







|



<
<







5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
....
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409


5410
5411
5412
5413
5414
5415
5416
    return 0;
}

static int
check_spatialite_table (const char *table)
{
/*
// Note: sqlite3 prevents 'sqlite_master' from being droped [will not list itself, returns 'not existing table']
// checking for SpatiaLite / RasterLite2 internal tables 
*/
    if (strcasecmp (table, "data_licenses") == 0)
	return 1;
    if (strcasecmp (table, "geometry_columns") == 0)
	return 1;
    if (strcasecmp (table, "geometry_columns_time") == 0)
................................................................................
	return 1;
    if (strcasecmp (table, "virts_geometry_columns_statistics") == 0)
	return 1;
    if (strcasecmp (table, "SE_external_graphics") == 0)
	return 1;
    if (strcasecmp (table, "SE_fonts") == 0)
	return 1;
    if (strcasecmp (table, "rl2map_configurations") == 0)
	return 1;
    if (strcasecmp (table, "SE_raster_styled_layers") == 0)
	return 1;


    if (strcasecmp (table, "SE_vector_styled_layers") == 0)
	return 1;
    if (strcasecmp (table, "SE_vector_styles") == 0)
	return 1;
    if (strcasecmp (table, "iso_metadata") == 0)
	return 1;
    if (strcasecmp (table, "iso_metadata_reference") == 0)