Skip to content

Commit f8ff8c1

Browse files
author
Deepa Dixit
committed
Bug#23280117: 5.7 BUG XXXXX TEST REPLACE NUMBER ROUND+GIS PRECISION DIFFERENCES
(CONTRIBUTION) Issue: ------ MTR tests written to test GIS functions fail with a result content mismatch on some platforms due to difference in precision. These have been corrected using the mysqltest function --replace_regex till now. This requires a complex regular expression to replace the result with a lower precision. Fix: ---- For ease of use, a new mysqltest command 'replace_numberic_round' has been introduced to round off numeric values. The usage is as follows: --replace_numberic_round <precision> where precision is the number of digits after the decimal that the result will be rounded off to. The precision can be any number between 0 to 16. Patch contributed by: Daniel Black Reviewed-by: Pavan Naik <pavan.naik@oracle.com> Reviewed-by: Srikanth BR <srikanth.b.r@oracle.com> RB: 14633
1 parent ccfa2b9 commit f8ff8c1

15 files changed

+894
-594
lines changed

client/mysqltest.cc

+233-6
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ using std::string;
7878
#define MAX_EMBEDDED_SERVER_ARGS 64
7979
#define MAX_DELIMITER_LENGTH 16
8080
#define DEFAULT_MAX_CONN 128
81+
#define REPLACE_ROUND_MAX 16
82+
#ifdef _WIN32
83+
#define snprintf sprintf_s
84+
#endif
8185

8286
/* Flags controlling send and reap */
8387
#define QUERY_SEND_FLAG 1
@@ -394,7 +398,7 @@ enum enum_commands {
394398
Q_DISABLE_RECONNECT, Q_ENABLE_RECONNECT,
395399
Q_IF,
396400
Q_DISABLE_PARSING, Q_ENABLE_PARSING,
397-
Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST,
401+
Q_REPLACE_REGEX, Q_REPLACE_NUMBERIC_ROUND, Q_REMOVE_FILE, Q_FILE_EXIST,
398402
Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_SKIP,
399403
Q_CHMOD_FILE, Q_APPEND_FILE, Q_CAT_FILE, Q_DIFF_FILES,
400404
Q_SEND_QUIT, Q_CHANGE_USER, Q_MKDIR, Q_RMDIR,
@@ -480,6 +484,7 @@ const char *command_names[]=
480484
"disable_parsing",
481485
"enable_parsing",
482486
"replace_regex",
487+
"replace_numberic_round",
483488
"remove_file",
484489
"file_exists",
485490
"write_file",
@@ -659,6 +664,13 @@ void free_replace();
659664
void do_get_replace_regex(struct st_command *command);
660665
void free_replace_regex();
661666

667+
/* For replace numberic round */
668+
static int glob_replace_numberic_round= -1;
669+
void do_get_replace_numberic_round(struct st_command *command);
670+
void free_replace_numberic_round();
671+
void replace_numberic_round_append(int round, DYNAMIC_STRING* ds,
672+
const char *from, size_t len);
673+
662674
/* Used by sleep */
663675
void check_eol_junk_line(const char *eol);
664676

@@ -669,6 +681,7 @@ void free_all_replace(){
669681
free_replace();
670682
free_replace_regex();
671683
free_replace_column();
684+
free_replace_numberic_round();
672685
}
673686

674687

@@ -2578,11 +2591,40 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
25782591
len= strlen(val);
25792592
}
25802593
}
2581-
2594+
DYNAMIC_STRING ds_temp;
2595+
init_dynamic_string(&ds_temp, "", 512, 512);
2596+
2597+
/* Store result from replace_result in ds_temp */
25822598
if (glob_replace)
2583-
replace_strings_append(glob_replace, &result, val, len);
2584-
else
2599+
replace_strings_append(glob_replace, &ds_temp, val, len);
2600+
2601+
/*
2602+
Call the replace_numberic_round function with the specified
2603+
precision. It may be used along with replace_result, so use the
2604+
output from replace_result as the input for replace_numberic_round.
2605+
*/
2606+
if (glob_replace_numberic_round >= 0)
2607+
{
2608+
/* Copy the result from replace_result if it was used, into buffer */
2609+
if (ds_temp.length > 0)
2610+
{
2611+
char buffer[512];
2612+
strcpy(buffer, ds_temp.str);
2613+
dynstr_free(&ds_temp);
2614+
init_dynamic_string(&ds_temp, "", 512, 512);
2615+
replace_numberic_round_append(glob_replace_numberic_round, &ds_temp,
2616+
buffer, strlen(buffer));
2617+
}
2618+
else
2619+
replace_numberic_round_append(glob_replace_numberic_round, &ds_temp,
2620+
val, len);
2621+
}
2622+
2623+
if(!glob_replace && glob_replace_numberic_round < 0)
25852624
dynstr_append_mem(&result, val, len);
2625+
else
2626+
dynstr_append_mem(&result, ds_temp.str, strlen(ds_temp.str));
2627+
dynstr_free(&ds_temp);
25862628
}
25872629
dynstr_append_mem(&result, "\t", 1);
25882630
}
@@ -9533,6 +9575,9 @@ int main(int argc, char **argv)
95339575
case Q_REPLACE_COLUMN:
95349576
do_get_replace_column(command);
95359577
break;
9578+
case Q_REPLACE_NUMBERIC_ROUND:
9579+
do_get_replace_numberic_round(command);
9580+
break;
95369581
case Q_SAVE_MASTER_POS: do_save_master_pos(); break;
95379582
case Q_SYNC_WITH_MASTER: do_sync_with_master(command); break;
95389583
case Q_SYNC_SLAVE_WITH_MASTER:
@@ -9883,6 +9928,158 @@ void free_replace_column()
98839928
max_replace_column= 0;
98849929
}
98859930

9931+
/*
9932+
Functions to round numeric results.
9933+
9934+
SYNOPSIS
9935+
do_get_replace_numberic_round()
9936+
command - command handle
9937+
9938+
DESCRIPTION
9939+
replace_numberic_round <precision>
9940+
9941+
where precision is the number of digits after the decimal point
9942+
that the result will be rounded off to. The precision can only
9943+
be a number between 0 and 16.
9944+
eg. replace_numberic_round 10;
9945+
Numbers which are > 1e10 or < -1e10 are represented using the
9946+
exponential notation after they are rounded off.
9947+
Trailing zeroes after the decimal point are removed from the
9948+
numbers.
9949+
If the precision is 0, then the value is rounded off to the
9950+
nearest whole number.
9951+
*/
9952+
void do_get_replace_numberic_round(struct st_command *command)
9953+
{
9954+
DYNAMIC_STRING ds_round;
9955+
const struct command_arg numeric_arg =
9956+
{ "precision", ARG_STRING, TRUE, &ds_round,
9957+
"Number of decimal precision"};
9958+
DBUG_ENTER("get_replace_numberic_round");
9959+
9960+
check_command_args(command, command->first_argument,
9961+
&numeric_arg,
9962+
sizeof(numeric_arg)/sizeof(struct command_arg),
9963+
' ');
9964+
9965+
// Parse the argument string to get the precision
9966+
long int v= 0;
9967+
if (str2int(ds_round.str, 10, 0, REPLACE_ROUND_MAX, &v) == NullS)
9968+
die("A number between 0 and %d is required for the precision "\
9969+
"in replace_numberic_round", REPLACE_ROUND_MAX);
9970+
9971+
glob_replace_numberic_round= (int) v;
9972+
dynstr_free(&ds_round);
9973+
DBUG_VOID_RETURN;
9974+
}
9975+
9976+
9977+
void free_replace_numberic_round()
9978+
{
9979+
glob_replace_numberic_round= -1;
9980+
}
9981+
9982+
9983+
/*
9984+
Round the digits after the decimal point to the specified precision
9985+
by iterating through the result set element, identifying the part to
9986+
be rounded off, and rounding that part off.
9987+
*/
9988+
void replace_numberic_round_append(int round, DYNAMIC_STRING* result,
9989+
const char *from, size_t len)
9990+
{
9991+
while (len > 0)
9992+
{
9993+
// Move pointer to the start of the numeric values
9994+
size_t size= strcspn(from, "0123456789");
9995+
if (size > 0)
9996+
{
9997+
dynstr_append_mem(result, from, size);
9998+
from+= size;
9999+
len-= size;
10000+
}
10001+
10002+
/*
10003+
Move the pointer to the end of the numeric values and the
10004+
the start of the non-numeric values such as "." and "e"
10005+
*/
10006+
size= strspn(from, "0123456789");
10007+
int r= round;
10008+
10009+
/*
10010+
If result from one of the rows of the result set is null,
10011+
break the loop
10012+
*/
10013+
if (*(from + size) == 0)
10014+
{
10015+
dynstr_append_mem(result, from, size);
10016+
break;
10017+
}
10018+
10019+
switch (*(from + size))
10020+
{
10021+
// double/float
10022+
case '.':
10023+
size_t size1;
10024+
size1= strspn(from + size + 1, "0123456789");
10025+
10026+
/*
10027+
Restrict rounding to less than the
10028+
the existing precision to avoid 1.2 being replaced
10029+
to 1.2000000
10030+
*/
10031+
if (size1 < (size_t) r)
10032+
r= size1;
10033+
// fallthrough: all cases till next break are executed
10034+
case 'e':
10035+
case 'E':
10036+
if (isdigit(*(from + size + 1)))
10037+
{
10038+
char *end;
10039+
double val= strtod(from, &end);
10040+
if (end != NULL)
10041+
{
10042+
const char *format= (val < 1e10 && val > -1e10) ? "%.*f" : "%.*e";
10043+
char buf[40];
10044+
10045+
size= snprintf(buf, sizeof(buf), format, r, val);
10046+
if (val < 1e10 && val > -1e10 && r > 0)
10047+
{
10048+
/*
10049+
2.0000000 need to be represented as 2 for consistency
10050+
2.0010000 also becomes 2.001
10051+
*/
10052+
while (buf[size-1] == '0')
10053+
size--;
10054+
10055+
// don't leave 100. trailing
10056+
if (buf[size-1] == '.')
10057+
size--;
10058+
}
10059+
dynstr_append_mem(result, buf, size);
10060+
len-= (end - from);
10061+
from= end;
10062+
break;
10063+
}
10064+
}
10065+
10066+
/*
10067+
This is because strtod didn't convert or there wasn't digits after
10068+
[.eE] so output without changing
10069+
*/
10070+
dynstr_append_mem(result, from, size);
10071+
from+= size;
10072+
len-= size;
10073+
break;
10074+
// int
10075+
default:
10076+
dynstr_append_mem(result, from, size);
10077+
from+= size;
10078+
len-= size;
10079+
break;
10080+
}
10081+
}
10082+
}
988610083

988710084
/****************************************************************************/
988810085
/*
@@ -11107,13 +11304,43 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
1110711304
}
1110811305
}
1110911306

11307+
DYNAMIC_STRING ds_temp;
11308+
init_dynamic_string(&ds_temp, "", 512, 512);
11309+
11310+
/* Store result from replace_result in ds_temp */
1111011311
if (glob_replace)
1111111312
{
1111211313
/* Normal replace */
11113-
replace_strings_append(glob_replace, ds, val, len);
11314+
replace_strings_append(glob_replace, &ds_temp, val, len);
1111411315
}
11115-
else
11316+
11317+
/*
11318+
Call the replace_numberic_round function with the specified
11319+
precision. It may be used along with replace_result, so use the
11320+
output from replace_result as the input for replace_numberic_round.
11321+
*/
11322+
if (glob_replace_numberic_round >= 0)
11323+
{
11324+
/* Copy the result from replace_result if it was used, into buffer */
11325+
if(ds_temp.length > 0)
11326+
{
11327+
char buffer[512];
11328+
strcpy(buffer, ds_temp.str);
11329+
dynstr_free(&ds_temp);
11330+
init_dynamic_string(&ds_temp, "", 512, 512);
11331+
replace_numberic_round_append(glob_replace_numberic_round, &ds_temp,
11332+
buffer, strlen(buffer));
11333+
}
11334+
else
11335+
replace_numberic_round_append(glob_replace_numberic_round, &ds_temp,
11336+
val, len);
11337+
}
11338+
11339+
if (!glob_replace && glob_replace_numberic_round < 0)
1111611340
dynstr_append_mem(ds, val, len);
11341+
else
11342+
dynstr_append_mem(ds, ds_temp.str, strlen(ds_temp.str));
11343+
dynstr_free(&ds_temp);
1111711344
}
1111811345

1111911346

mysql-test/r/gis-precise.result

+3-3
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ ST_astext(ST_UNION(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_Geom
151151
GEOMETRYCOLLECTION(POLYGON((0 0,50 45,40 50,0 0)),MULTILINESTRING((-10 -10,0 0),(46.666666666666664 46.666666666666664,200 200,199 201,45.333333333333336 47.333333333333336),(8 10,-11 -9)))
152152
select ST_astext(ST_buffer(ST_geometryfromtext('point(1 1)'), 1));
153153
ST_astext(ST_buffer(ST_geometryfromtext('point(1 1)'), 1))
154-
POLYGON((2 1,1.98078 1.19509,1.92387 1.38268,1.83146 1.55557,1.70710 1.70710,1.55557 1.83146,1.38268 1.92387,1.19509 1.98078,1.00000 2,0.80490 1.98078,0.61731 1.92387,0.44442 1.83146,0.29289 1.70710,0.16853 1.55557,0.07612 1.38268,0.01921 1.19509,0 1.00000,0.01921 0.80490,0.07612 0.61731,0.16853 0.44442,0.29289 0.29289,0.44442 0.16853,0.61731 0.07612,0.80490 0.01921,1 0,1.19509 0.01921,1.38268 0.07612,1.55557 0.16853,1.70710 0.29289,1.83146 0.44442,1.92387 0.61731,1.98078 0.80490,2 1))
154+
POLYGON((2 1,1.98079 1.19509,1.92388 1.38268,1.83147 1.55557,1.70711 1.70711,1.55557 1.83147,1.38268 1.92388,1.19509 1.98079,1 2,0.80491 1.98079,0.61732 1.92388,0.44443 1.83147,0.29289 1.70711,0.16853 1.55557,0.07612 1.38268,0.01921 1.19509,0 1,0.01921 0.80491,0.07612 0.61732,0.16853 0.44443,0.29289 0.29289,0.44443 0.16853,0.61732 0.07612,0.80491 0.01921,1 0,1.19509 0.01921,1.38268 0.07612,1.55557 0.16853,1.70711 0.29289,1.83147 0.44443,1.92388 0.61732,1.98079 0.80491,2 1))
155155
create table t1(geom geometrycollection);
156156
insert into t1 values (ST_GeomFromText('POLYGON((0 0, 10 10, 0 8, 0 0))'));
157157
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
@@ -1100,7 +1100,7 @@ Warning 1287 'GEOMFROMTEXT' is deprecated and will be removed in a future releas
11001100
Warning 1287 'GEOMFROMTEXT' is deprecated and will be removed in a future release. Please use ST_GEOMFROMTEXT instead
11011101
select st_distance_sphere(geomfromtext('point(-120 45)'), geomfromtext('point(30.24 68.37)'));
11021102
st_distance_sphere(geomfromtext('point(-120 45)'), geomfromtext('point(30.24 68.37)'))
1103-
7168298.19690
1103+
7168298.1969
11041104
Warnings:
11051105
Warning 1287 'GEOMFROMTEXT' is deprecated and will be removed in a future release. Please use ST_GEOMFROMTEXT instead
11061106
Warning 1287 'GEOMFROMTEXT' is deprecated and will be removed in a future release. Please use ST_GEOMFROMTEXT instead
@@ -1851,7 +1851,7 @@ SELECT
18511851
ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((12 -12,-15 19),(2 -9,-4 -8,18 3,-9 -8),(13 11,-15 9,-16 6,-17 5)),
18521852
LINESTRING(14 -16,-3 18,-13 -7,-10 1))'), 6561)) as result;
18531853
result
1854-
POLYGON((-549 6535,-849 6526,-1156 6456,-1273 6444,-1303 6438,-1347 6425,-1518 6401,-1773 6314,-2102 6238,-2405 6103,-2534 6063,-2579 6039,-2705 5996,-2933 5866,-3276 5712,-3536 5526,-3667 5456,-3712 5419,-3793 5373,-3986 5206,-4324 4966,-4533 4744,-4661 4639,-4701 4590,-4743 4554,-4795 4487,-4804 4480,-4888 4370,-4897 4358,-5206 4030,-5359 3786,-5476 3644,-5508 3583,-5519 3569,-5557 3495,-5585 3458,-5662 3303,-5889 2940,-5984 2690,-6081 2509,-6126 2358,-6153 2304,-6156 2296,-6207 2103,-6346 1738,-6387 1495,-6453 1278,-6467 1133,-6486 1062,-6502 812,-6560 470,-6553 245,-6577 -1,-6565 -129,-6570 -211,-6531 -515,-6522 -815,-6477 -1013,-6450 -1281,-6418 -1386,-6406 -1478,-6353 -1636,-6353 -1637,-6351 -1642,-6291 -1821,-6234 -2068,-6160 -2235,-6101 -2427,-6085 -2483,-6084 -2485,-6075 -2512,-6033 -2591,-6000 -2689,-5918 -2832,-5913 -2845,-5871 -2916,-5854 -2950,-5826 -2994,-5792 -3053,-5708 -3242,-5619 -3366,-5485 -3621,-5474 -3635,-5468 -3645,-5423 -3700,-5367 -3798,-5262 -3920,-5246 -3945,-5185 -4012,-5169 -4038,-5058 -4155,-5057 -4156,-4962 -4290,-4935 -4321,-4860 -4392,-4675 -4620,-4606 -4677,-4531 -4764,-4410 -4858,-4377 -4893,-4316 -4938,-4284 -4972,-4124 -5086,-3999 -5203,-3890 -5272,-3685 -5441,-3607 -5484,-3523 -5549,-3395 -5614,-3340 -5654,-3285 -5680,-3235 -5715,-3050 -5798,-2909 -5886,-2761 -5942,-2555 -6054,-2469 -6081,-2383 -6124,-2256 -6160,-2175 -6198,-2130 -6209,-2060 -6240,-1858 -6286,-1707 -6343,-1521 -6375,-1326 -6435,-1237 -6444,-1153 -6468,-1035 -6477,-925 -6504,-894 -6505,-806 -6525,-594 -6531,-439 -6557,-218 -6550,-47 -6568,42 -6560,120 -6566,224 -6554,359 -6560,375 -6557,479 -6560,691 -6524,846 -6519,1091 -6463,1233 -6450,1319 -6424,1388 -6416,1463 -6392,1582 -6372,1630 -6364,1634 -6363,1746 -6344,1949 -6266,2099 -6231,2356 -6116,2466 -6084,2493 -6073,2488 -6060,2498 -6057,2530 -6047,2532 -6046,2604 -6023,2646 -5999,2948 -5884,3132 -5768,3273 -5705,3582 -5485,3593 -5478,3663 -5440,3689 -5419,3720 -5402,3738 -5386,4036 -5199,4194 -5049,4321 -4959,4571 -4693,4657 -4623,4700 -4570,4854 -4424,4885 -4396,4887 -4392,4970 -4314,5095 -4138,5203 -4023,5383 -3736,5472 -3628,5513 -3550,5636 -3385,5652 -3352,5713 -3265,5800 -3070,5886 -2933,5996 -2645,6077 -2493,6100 -2414,6180 -2248,6198 -2180,6238 -2090,6284 -1886,6343 -1731,6389 -1460,6449 -1262,6456 -1185,6497 -1029,6503 -922,6523 -836,6529 -631,6557 -463,6550 -223,6573 17,6566 91,6575 228,6556 371,6558 449,6524 645,6519 822,6474 1020,6446 1297,6425 1366,6411 1477,6353 1650,6342 1716,6272 1897,6231 2075,6162 2229,6071 2528,6039 2589,6011 2672,5903 2863,5882 2918,5865 2952,5770 3103,5705 3249,5625 3360,5464 3661,5422 3713,5390 3768,5254 3928,5199 4015,5032 4194,4959 4297,4932 4328,4860 4395,4647 4655,4597 4695,4571 4726,4434 4835,4344 4932,4116 5097,3996 5210,3879 5283,3652 5470,3598 5498,3584 5509,3461 5573,3329 5669,3072 5789,2906 5893,2737 5957,2517 6075,2358 6123,2193 6200,1918 6269,1704 6350,1481 6388,1286 6447,1159 6459,976 6505,696 6520,436 6564,165 6556,6 6571,-84 6562,-275 6573,-549 6535))
1854+
POLYGON((-549 6536,-849 6527,-1156 6456,-1274 6445,-1304 6439,-1348 6425,-1518 6402,-1773 6315,-2103 6239,-2405 6103,-2534 6064,-2580 6040,-2705 5997,-2933 5866,-3276 5712,-3537 5527,-3668 5456,-3713 5420,-3793 5373,-3987 5206,-4324 4967,-4534 4744,-4661 4639,-4702 4590,-4743 4554,-4796 4488,-4804 4480,-4888 4370,-4898 4359,-5207 4031,-5359 3787,-5476 3644,-5508 3584,-5520 3569,-5558 3495,-5586 3459,-5662 3304,-5889 2941,-5985 2690,-6081 2509,-6127 2359,-6153 2305,-6156 2297,-6208 2103,-6347 1739,-6388 1495,-6453 1278,-6467 1133,-6486 1063,-6503 812,-6560 470,-6554 246,-6578 -2,-6565 -129,-6571 -212,-6532 -515,-6523 -815,-6477 -1013,-6451 -1282,-6419 -1386,-6407 -1478,-6354 -1636,-6354 -1637,-6352 -1643,-6292 -1822,-6235 -2069,-6160 -2235,-6102 -2428,-6085 -2483,-6084 -2485,-6076 -2512,-6034 -2591,-6001 -2689,-5919 -2833,-5914 -2846,-5871 -2916,-5854 -2950,-5827 -2994,-5793 -3053,-5708 -3242,-5620 -3366,-5485 -3621,-5474 -3635,-5468 -3646,-5423 -3701,-5367 -3799,-5262 -3920,-5247 -3946,-5186 -4012,-5169 -4039,-5058 -4156,-5058 -4156,-4963 -4290,-4936 -4321,-4860 -4392,-4675 -4620,-4607 -4677,-4531 -4764,-4410 -4859,-4378 -4894,-4317 -4939,-4285 -4973,-4124 -5086,-4000 -5204,-3890 -5272,-3686 -5442,-3608 -5484,-3524 -5550,-3396 -5614,-3341 -5655,-3285 -5680,-3235 -5716,-3050 -5799,-2910 -5886,-2762 -5943,-2555 -6055,-2470 -6081,-2383 -6125,-2257 -6160,-2175 -6198,-2131 -6209,-2061 -6240,-1858 -6286,-1708 -6344,-1521 -6375,-1326 -6435,-1237 -6445,-1153 -6468,-1035 -6477,-926 -6504,-895 -6505,-807 -6525,-595 -6531,-439 -6557,-219 -6551,-47 -6569,42 -6561,120 -6567,224 -6554,359 -6560,376 -6558,479 -6560,691 -6524,846 -6520,1092 -6463,1233 -6450,1320 -6425,1389 -6416,1463 -6392,1582 -6372,1630 -6365,1635 -6363,1747 -6344,1950 -6266,2100 -6232,2356 -6117,2466 -6084,2493 -6073,2488 -6061,2499 -6057,2530 -6048,2533 -6046,2604 -6023,2647 -6000,2948 -5884,3133 -5768,3273 -5705,3583 -5485,3593 -5478,3664 -5440,3689 -5420,3720 -5402,3739 -5387,4037 -5199,4195 -5050,4321 -4960,4572 -4694,4657 -4623,4701 -4570,4854 -4425,4885 -4397,4888 -4393,4971 -4315,5095 -4138,5204 -4024,5384 -3736,5472 -3628,5514 -3551,5637 -3385,5652 -3353,5714 -3265,5801 -3070,5886 -2934,5996 -2645,6077 -2493,6101 -2415,6181 -2249,6198 -2181,6238 -2091,6285 -1886,6344 -1732,6389 -1461,6449 -1262,6457 -1185,6497 -1029,6504 -923,6523 -837,6529 -632,6557 -463,6550 -224,6574 18,6567 92,6575 228,6556 371,6558 449,6525 646,6520 822,6474 1021,6447 1298,6426 1366,6411 1478,6353 1650,6342 1717,6273 1898,6232 2076,6163 2230,6072 2528,6039 2589,6011 2672,5903 2863,5882 2918,5865 2952,5770 3104,5705 3249,5626 3360,5464 3662,5422 3713,5391 3769,5254 3929,5200 4015,5033 4194,4960 4297,4933 4328,4861 4396,4647 4655,4598 4696,4572 4726,4435 4835,4344 4932,4117 5098,3997 5211,3880 5284,3652 5470,3599 5499,3585 5510,3461 5574,3330 5670,3072 5790,2907 5893,2737 5958,2517 6075,2359 6123,2193 6200,1918 6269,1705 6351,1482 6388,1286 6447,1160 6460,977 6505,696 6521,436 6564,165 6556,6 6572,-85 6563,-276 6573,-549 6536))
18551855
#
18561856
# Bug#20517621 ASSERTION `GEOMETRY::IS_VALID_GEOTYPE(GT)' FAILED
18571857
#

0 commit comments

Comments
 (0)