diff options
-rw-r--r-- | mysql-test/r/gis-precise.result | 18 | ||||
-rw-r--r-- | mysql-test/t/gis-precise.test | 12 | ||||
-rw-r--r-- | sql/gcalc_slicescan.cc | 2 | ||||
-rw-r--r-- | sql/item_geofunc.cc | 8 |
4 files changed, 39 insertions, 1 deletions
diff --git a/mysql-test/r/gis-precise.result b/mysql-test/r/gis-precise.result index 8c9495b1a8d..a674f1b43cf 100644 --- a/mysql-test/r/gis-precise.result +++ b/mysql-test/r/gis-precise.result @@ -434,3 +434,21 @@ ST_WITHIN( MULTIPOINTFROMTEXT(' MULTIPOINT( 2 9 , 2 9 , 4 9 , 9 1 ) ') , POLYGON SELECT ST_INTERSECTS( GeomFromText('MULTILINESTRING( ( 4030 3045 , 3149 2461 , 3004 3831 , 3775 2976 ) )') , GeomFromText('LINESTRING(3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29,3039.07 3175.05,3039.07 3175.05,3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29)') ); ST_INTERSECTS( GeomFromText('MULTILINESTRING( ( 4030 3045 , 3149 2461 , 3004 3831 , 3775 2976 ) )') , GeomFromText('LINESTRING(3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29,3039.07 3175.05,3039.07 3175.05,3058.41 3187.91,3081.52 3153.19, 1 +select ASTEXT(ST_BUFFER(ST_GEOMCOLLFROMTEXT(' GEOMETRYCOLLECTION(LINESTRING(100 100, 31 10, 77 80), POLYGON((0 0,4 7,1 1,0 0)), POINT(20 20))'), -3)); +ASTEXT(ST_BUFFER(ST_GEOMCOLLFROMTEXT(' GEOMETRYCOLLECTION(LINESTRING(100 100, 31 10, 77 80), POLYGON((0 0,4 7,1 1,0 0)), POINT(20 20))'), -3)) +POLYGON((4 7,4 7,4 7)) +SELECT ASTEXT(ST_BUFFER( POLYGONFROMTEXT( 'POLYGON( ( 0.0 -3.0, + -2.910427500435995 0.727606875108998, + -0.910427500435995 8.727606875108998, + 7.664100588675687 1.503849116986468, + 1.664100588675687 -2.496150883013531, + 0.0 -3.0 +))' ), 3 )); +ASTEXT(ST_BUFFER( POLYGONFROMTEXT( 'POLYGON( ( 0.0 -3.0, + -2.910427500435995 0.727606875108998, + -0.910427500435995 8.727606875108998, + 7.664100588675687 1.503849116986468, + 1.664100588675687 -2.496150883013531, + 0.0 -3.0 +))' ), 3 )) +POLYGON((-0.0729364962701671 -5.99911324686345,-0.220008153134309 -5.99192185936639,-0.366549791087113 -5.97752267004871,-0.512208378487218 -5.9559503678187,-0.656633011039392 -5.92725692224194,-0.799475757153712 -5.89151145834207,-0.940392496143245 -5.84880009007257,-1.07904374724091 -5.79922571286066,-1.21509548743841 -5.74290775572326,-1.34821995617687 -5.67998189355198,-1.47809644495078 -5.61059972026044,-1.60441206992284 -5.53492838358126,-1.72686252568857 -5.45315018239253,-1.84515281837461 -5.36546212754384,-1.95899797630489 -5.27207546723989,-2.0681237365223 -5.17321517812504,-2.17226720551217 -5.06911942329493,-2.27117749253584 -4.96003897854064,-2.36461631404833 -4.84623662820791,-5.27504381448432 -1.11862975309891,-5.31923088115563 -1.06059509140196,-5.40407228371483 -0.940246744015369,-5.48290627757363 -0.815880391173581,-5.55554294473577 -0.687795642313801,-5.62180729710785 -0.556301064814931,-5.68153969806092 -0.421713440631731,-5.73459624700915 -0.284357003139341,-5.78084912607892 -0.144562656026683,-5.82018690803327 -0.00266717612049117,-5.8525148247099 0.140987597939565,-5.87775499532594 0.286055589220102,-5.8958466140996 0.432187316223671,-5.90674609673661 0.579030734820292,-5.91042718542862 0.726232086352601,-5.90688101211055 0.873436749871442,-5.89611611982452 1.02029009644879,-5.87815844213895 1.16643834350991,-5.85305124067228 1.31152940712656,-5.82085500087199 1.455213750218,-3.82085500087199 9.455213750218,-3.81089050942899 9.49397123588218,-3.76979305783883 9.63536709077082,-3.72180714417003 9.77457607178953,-3.66704837069171 9.91126281230977,-3.60564865608547 10.0450980220013,-3.53775591764177 10.1757592801213,-3.46353371491424 10.3029318122545,-3.38316085569034 10.426309248632,-3.29683096522777 10.5455943622029,-3.20475201979426 10.6604997846804,-3.10714584563452 10.7707486988374,-3.00424758457139 10.876075505383,-2.8963051275286 10.9762264628145,-2.78357851733981 11.0709602987035,-2.66633932228265 11.1600487909416,-2.54486998184695 11.2432773175476,-2.41946312631327 11.3204453737111,-2.29042087178095 11.3913670548256,-2.15805409234391 11.4558715043494,-2.02268167116779 11.5138033254136,-1.88462973227241 11.565022955187,-1.7442308548705 11.6094070010951,-1.60182327215521 11.646848538084,-1.45775005646673 11.6772573662113,-1.31235829280098 11.7005602279467,-1.16599824265144 11.7167009846551,-1.01902250019855 11.72564075184,-0.871785142879433 11.727357992819,-0.724640878384343 11.7218485706083,-0.57794419013476 11.7091257578886,-0.432048483301792 11.68922020503,-0.287305233422154 11.6621798662529,-0.144063139662816 11.628069884102,-0.002667284774171 11.5869724325118,0.13654169624454 11.538986518843,0.273228436764778 11.4842277453647,0.407063646456282 11.4228280307585,0.537724904576328 11.3549352923148,0.66489743670953 11.2807130895872,0.78827487308698 11.2003402303633,0.907559986657858 11.1140103399008,1.02246540913543 11.0219313944673,9.59699349824711 3.79817363634473,9.68110149747442 3.72459388708164,9.78763871268892 3.62294935903788,9.88906013856269 3.51619973289977,9.98512144199734 3.40460217786682,10.0755912028989 3.2884255422239,10.1602514716892 3.16794970566216,10.2388982943653 3.04346490502429,10.3113422038428 2.91527103509863,10.3774086763983 2.78367692614628,10.4369385521129 2.64899959990198,10.4897884183015 2.511563505841,10.5358309550076 2.37169973955192,10.5749552417273 2.22974524509834,10.607067024627 2.08604200329115,10.6320889436092 1.94093620782678,10.6499607186792 1.79477743127626,10.6606392951656 1.64791778293431,10.6640989474422 1.50071106055717,10.6603313409038 1.35351189803282,10.6493455520444 1.20667491103692,10.6311680465917 1.06055384273254,10.6058426157484 0.915500711571916,10.5734302706958 0.77186496325317,10.534009095612 0.629992628875007,10.4876740595607 0.490225491317493,10.4345367877022 0.35290026185716,10.3747252923787 0.218347769000047,10.3083836647213 0.0868921614868527,10.2356717275219 -0.0411498726097721,10.1567646502059 -0.165469868814531,10.0718525268341 -0.28576832936742,9.98113991814919 -0.401755444740068,9.88484535877086 -0.513151791812269,9.7832008307271 -0.619689007026761,9.67645120458899 -0.721110432900533,9.56485364955604 -0.817171736335187,9.44867701391312 -0.907641497236773,9.32820117735137 -0.992301766027063,3.32820117735137 -4.99230176602706,3.20506280974101 -5.07014300290229,3.07690684619952 -5.14265394908043,2.94534730863644 -5.20878923756612,2.81070113550102 -5.26838954265664,2.67329270121795 -5.32131128199666,2.53345303474098 -5.36742696248069,0.869352446065291 -5.87127607946716,0.800800745687435 -5.89114478463228,0.657974395392574 -5.92695570431255,0.513562927147462 -5.95571533133009,0.367914240828052 -5.97735438122436,0.221379216877005 -5.99182072362883,0.0743108710019724 -5.99907950785752,-0.0729364962701671 -5.99911324686345)) diff --git a/mysql-test/t/gis-precise.test b/mysql-test/t/gis-precise.test index b48da25c3c9..f3c619f7df0 100644 --- a/mysql-test/t/gis-precise.test +++ b/mysql-test/t/gis-precise.test @@ -313,3 +313,15 @@ SELECT ST_WITHIN( MULTIPOINTFROMTEXT(' MULTIPOINT( 2 9 , 2 9 , 4 9 , 9 1 ) ') , SELECT ST_INTERSECTS( GeomFromText('MULTILINESTRING( ( 4030 3045 , 3149 2461 , 3004 3831 , 3775 2976 ) )') , GeomFromText('LINESTRING(3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29,3039.07 3175.05,3039.07 3175.05,3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29)') ); +#bug 977201 ST_BUFFER fails with the negative D +select ASTEXT(ST_BUFFER(ST_GEOMCOLLFROMTEXT(' GEOMETRYCOLLECTION(LINESTRING(100 100, 31 10, 77 80), POLYGON((0 0,4 7,1 1,0 0)), POINT(20 20))'), -3)); + +#bug 986977 Assertion `!cur_p->event' failed in Gcalc_scan_iterator::arrange_event(int, int) +SELECT ASTEXT(ST_BUFFER( POLYGONFROMTEXT( 'POLYGON( ( 0.0 -3.0, + -2.910427500435995 0.727606875108998, + -0.910427500435995 8.727606875108998, + 7.664100588675687 1.503849116986468, + 1.664100588675687 -2.496150883013531, + 0.0 -3.0 +))' ), 3 )); + diff --git a/sql/gcalc_slicescan.cc b/sql/gcalc_slicescan.cc index 9e88f0a00ad..d05ef7ed826 100644 --- a/sql/gcalc_slicescan.cc +++ b/sql/gcalc_slicescan.cc @@ -574,7 +574,7 @@ int gcalc_set_double(Gcalc_internal_coord *c, double d, double ext) c[1]= 0; c[0]++; } - if (sign) + if (sign && (c[0] | c[1])) c[0]|= GCALC_COORD_MINUS; #ifdef GCALC_CHECK_WITH_FLOAT GCALC_DBUG_ASSERT(de_check(d, gcalc_get_double(c, 2))); diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index c4ac9d6adfe..172e0cbcd1f 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -1009,6 +1009,13 @@ static void calculate_perpendicular( int Item_func_buffer::Transporter::single_point(double x, double y) { + if (buffer_op == Gcalc_function::op_difference) + { + m_fn->add_operation(Gcalc_function::op_false, 0); + return 0; + } + + m_nshapes= 0; return add_point_buffer(x, y); } @@ -1108,6 +1115,7 @@ int Item_func_buffer::Transporter::start_line() { if (buffer_op == Gcalc_function::op_difference) { + m_fn->add_operation(Gcalc_function::op_false, 0); skip_line= TRUE; return 0; } |