From d3eabbd511122400b8e41fa52cd6b95046509f51 Mon Sep 17 00:00:00 2001 From: Brian Fraser Date: Wed, 22 Aug 2012 17:03:35 -0300 Subject: [PATCH] Fix for the first bug in 1034717: Illegal division by zero if base == 1 --- bin/pt-table-sync | 10 +++++++++ lib/TableChunker.pm | 7 +++++++ t/lib/TableChunker.t | 38 +++++++++++++++++++++++++++++++---- t/lib/samples/bug_1034717.sql | 20 ++++++++++++++++++ 4 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 t/lib/samples/bug_1034717.sql diff --git a/bin/pt-table-sync b/bin/pt-table-sync index 2207c55b..37cf406b 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -3927,6 +3927,12 @@ sub _chunk_char { } PTDEBUG && _d("Base", $base, "chars:", @chars); + die "Cannot chunk table $db_tbl using the character column " + . "$chunk_col, most likely because all values start with the " + . "same character. This table must be synced separately by " + . "specifying a list of --algorithms without the Chunk algorithm" + if $base == 1; + $sql = "SELECT MAX(LENGTH($qchunk_col)) FROM $db_tbl " . ($args{where} ? "WHERE $args{where} " : "") @@ -10198,6 +10204,10 @@ primary key columns and a checksum are sent over the network, not the entire row. If a row is found to be different, the entire row will be fetched, but not before. +Note that this algorithm will not work if chunking a char column where all +the values start with the same character. In that case, the tool will exit +and suggest picking a different algorithm. + =item Nibble Finds an index and ascends the index in fixed-size nibbles of L<"--chunk-size"> diff --git a/lib/TableChunker.pm b/lib/TableChunker.pm index e47fbf6e..b89e2358 100644 --- a/lib/TableChunker.pm +++ b/lib/TableChunker.pm @@ -627,6 +627,13 @@ sub _chunk_char { } PTDEBUG && _d("Base", $base, "chars:", @chars); + # See https://bugs.launchpad.net/percona-toolkit/+bug/1034717 + die "Cannot chunk table $db_tbl using the character column " + . "$chunk_col, most likely because all values start with the " + . "same character. This table must be synced separately by " + . "specifying a list of --algorithms without the Chunk algorithm" + if $base == 1; + # Now we begin calculating how to chunk the char column. This is # completely different from _chunk_numeric because we're not dealing # with the values to chunk directly (the characters) but rather a map. diff --git a/t/lib/TableChunker.t b/t/lib/TableChunker.t index 44b87406..65cd8b7f 100644 --- a/t/lib/TableChunker.t +++ b/t/lib/TableChunker.t @@ -25,9 +25,6 @@ my $dbh = $sb->get_dbh_for('master'); if ( !$dbh ) { plan skip_all => 'Cannot connect to sandbox master'; } -else { - plan tests => 94; -} $sb->create_dbs($dbh, ['test']); @@ -1358,9 +1355,42 @@ is_deeply( "Caclulate chunks for `key` col (bug 967451)" ); +# ############################################################################# +# Bug 1034717: Divison by zero error when all columns tsart with the same char +# https://bugs.launchpad.net/percona-toolkit/+bug/1034717 +# ############################################################################# +$sb->load_file('master', "t/lib/samples/bug_1034717.sql", 'test'); +$t = $tp->parse( $tp->get_create_table($dbh, 'bug_1034717', 'table1') ); + +%params = $c->get_range_statistics( + dbh => $dbh, + db => 'bug_1034717', + tbl => 'table1', + chunk_col => 'field1', + tbl_struct => $t, +); +local $EVAL_ERROR; +eval { + $c->calculate_chunks( + dbh => $dbh, + db => 'bug_1034717', + tbl => 'table1', + tbl_struct => $t, + chunk_col => 'field1', + chunk_size => '50', + %params, + ); +}; +like( + $EVAL_ERROR, + qr/^\QCannot chunk table `bug_1034717`.`table1` using the character column field1, most likely because all values start with the /, + "Bug 1034717: Catches the base == 1 case and dies" +); + # ############################################################################# # Done. # ############################################################################# $sb->wipe_clean($dbh); ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox"); -exit; + +done_testing; diff --git a/t/lib/samples/bug_1034717.sql b/t/lib/samples/bug_1034717.sql new file mode 100644 index 00000000..9606623a --- /dev/null +++ b/t/lib/samples/bug_1034717.sql @@ -0,0 +1,20 @@ +DROP DATABASE IF EXISTS `bug_1034717`; +CREATE DATABASE IF NOT EXISTS `bug_1034717`; +DROP TABLE IF EXISTS `bug_1034717`.`table1`; +USE `bug_1034717`; +CREATE TABLE `bug_1034717`.`table1` ( + field1 varchar(5) NOT NULL DEFAULT '', + field2 varchar(5) NOT NULL DEFAULT '', + PRIMARY KEY (field1), + KEY (field2) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO table1 (field1) VALUES ('10001'),('10002'),('10003'),('10004'),('10005'),('10006'),('10007'),('10008'),('10009'),('10010'),('10011'),('10012'),('10013'),('10014'),('10015'),('10016'),('10017'),('10018'),('10019'),('10020'),('10021'),('10022'),('10023'),('10024'),('10025'),('10026'),('10027'),('10028'),('10029'),('10030'),('10031'),('10032'),('10033'),('10034'),('10035'),('10036'),('10037'),('10038'),('10039'),('10040'),('10041'),('10042'),('10043'),('10044'),('10045'),('10046'),('10047'),('10048'),('10049'),('10050'),('10051'),('10052'),('10053'),('10054'),('10055'),('10056'),('10057'),('10058'),('10059'),('10060'),('10061'),('10062'),('10063'),('10064'),('10065'),('10066'),('10067'),('10068'),('10069'),('10070'),('10071'),('10072'),('10073'),('10074'),('10075'),('10076'),('10077'),('10078'),('10079'),('10080'),('10081'),('10082'),('10083'),('10084'),('10085'),('10086'),('10087'),('10088'),('10089'),('10090'),('10091'),('10092'),('10093'),('10094'),('10095'),('10096'),('10097'),('10098'),('10099'),('10100'),('10101'),('10102'),('10103'),('10104'),('10105'),('10106'),('10107'),('10108'),('10109'),('10110'),('10111'),('10112'),('10113'),('10114'),('10115'),('10116'),('10117'),('10118'),('10119'),('10120'),('10121'),('10122'),('10123'),('10124'),('10125'),('10126'),('10127'),('10128'),('10129'),('10130'),('10131'),('10132'),('10133'),('10134'),('10135'),('10136'),('10137'),('10138'),('10139'),('10140'),('10141'),('10142'),('10143'),('10144'),('10145'),('10146'),('10147'),('10148'),('10149'),('10150'),('10151'),('10152'),('10153'),('10154'),('10155'),('10156'),('10157'),('10158'),('10159'),('10160'),('10161'),('10162'),('10163'),('10164'),('10165'),('10166'),('10167'),('10168'),('10169'),('10170'),('10171'),('10172'),('10173'),('10174'),('10175'),('10176'),('10177'),('10178'),('10179'),('10180'),('10181'),('10182'),('10183'),('10184'),('10185'),('10186'),('10187'),('10188'),('10189'),('10190'),('10191'),('10192'),('10193'),('10194'),('10195'),('10196'),('10197'),('10198'),('10199'),('10200'),('10201'),('10202'),('10203'),('10204'),('10205'),('10206'),('10207'),('10208'),('10209'),('10210'),('10211'),('10212'),('10213'),('10214'),('10215'),('10216'),('10217'),('10218'),('10219'),('10220'),('10221'),('10222'),('10223'),('10224'),('10225'),('10226'),('10227'),('10228'),('10229'),('10230'),('10231'),('10232'),('10233'),('10234'),('10235'),('10236'),('10237'),('10238'),('10239'),('10240'),('10241'),('10242'),('10243'),('10244'),('10245'),('10246'),('10247'),('10248'),('10249'),('10250'),('10251'),('10252'),('10253'),('10254'),('10255'),('10256'),('10257'),('10258'),('10259'),('10260'),('10261'),('10262'),('10263'),('10264'),('10265'),('10266'),('10267'),('10268'),('10269'),('10270'),('10271'),('10272'),('10273'),('10274'),('10275'),('10276'),('10277'),('10278'),('10279'),('10280'),('10281'),('10282'),('10283'),('10284'),('10285'),('10286'),('10287'),('10288'),('10289'),('10290'),('10291'),('10292'),('10293'),('10294'),('10295'),('10296'),('10297'),('10298'),('10299'),('10300'),('10301'),('10302'),('10303'),('10304'),('10305'),('10306'),('10307'),('10308'),('10309'),('10310'),('10311'),('10312'),('10313'),('10314'),('10315'),('10316'),('10317'),('10318'),('10319'),('10320'),('10321'),('10322'),('10323'),('10324'),('10325'),('10326'),('10327'),('10328'),('10329'),('10330'),('10331'),('10332'),('10333'),('10334'),('10335'),('10336'),('10337'),('10338'),('10339'),('10340'),('10341'),('10342'),('10343'),('10344'),('10345'),('10346'),('10347'),('10348'),('10349'),('10350'),('10351'),('10352'),('10353'),('10354'),('10355'),('10356'),('10357'),('10358'),('10359'),('10360'),('10361'),('10362'),('10363'),('10364'),('10365'),('10366'),('10367'),('10368'),('10369'),('10370'),('10371'),('10372'),('10373'),('10374'),('10375'),('10376'),('10377'),('10378'),('10379'),('10380'),('10381'),('10382'),('10383'),('10384'),('10385'),('10386'),('10387'),('10388'),('10389'),('10390'),('10391'),('10392'),('10393'),('10394'),('10395'),('10396'),('10397'),('10398'),('10399'),('10400'),('10401'),('10402'),('10403'),('10404'),('10405'),('10406'),('10407'),('10408'),('10409'),('10410'),('10411'),('10412'),('10413'),('10414'),('10415'),('10416'),('10417'),('10418'),('10419'),('10420'),('10421'),('10422'),('10423'),('10424'),('10425'),('10426'),('10427'),('10428'),('10429'),('10430'),('10431'),('10432'),('10433'),('10434'),('10435'),('10436'),('10437'),('10438'),('10439'),('10440'),('10441'),('10442'),('10443'),('10444'),('10445'),('10446'),('10447'),('10448'),('10449'),('10450'),('10451'),('10452'),('10453'),('10454'),('10455'),('10456'),('10457'),('10458'),('10459'),('10460'),('10461'),('10462'),('10463'),('10464'),('10465'),('10466'),('10467'),('10468'),('10469'),('10470'),('10471'),('10472'),('10473'),('10474'),('10475'),('10476'),('10477'),('10478'),('10479'),('10480'),('10481'),('10482'),('10483'),('10484'),('10485'),('10486'),('10487'),('10488'),('10489'),('10490'),('10491'),('10492'),('10493'),('10494'),('10495'),('10496'),('10497'),('10498'),('10499'),('10500'),('10501'),('10502'),('10503'),('10504'),('10505'),('10506'),('10507'),('10508'),('10509'),('10510'),('10511'),('10512'),('10513'),('10514'),('10515'),('10516'),('10517'),('10518'),('10519'),('10520'),('10521'),('10522'),('10523'),('10524'),('10525'),('10526'),('10527'),('10528'),('10529'),('10530'),('10531'),('10532'),('10533'),('10534'),('10535'),('10536'),('10537'),('10538'),('10539'),('10540'),('10541'),('10542'),('10543'),('10544'),('10545'),('10546'),('10547'),('10548'),('10549'),('10550'),('10551'),('10552'),('10553'),('10554'),('10555'),('10556'),('10557'),('10558'),('10559'),('10560'),('10561'),('10562'),('10563'),('10564'),('10565'),('10566'),('10567'),('10568'),('10569'),('10570'),('10571'),('10572'),('10573'),('10574'),('10575'),('10576'),('10577'),('10578'),('10579'),('10580'),('10581'),('10582'),('10583'),('10584'),('10585'),('10586'),('10587'),('10588'),('10589'),('10590'),('10591'),('10592'),('10593'),('10594'),('10595'),('10596'),('10597'),('10598'),('10599'),('10600'),('10601'),('10602'),('10603'),('10604'),('10605'),('10606'),('10607'),('10608'),('10609'),('10610'),('10611'),('10612'),('10613'),('10614'),('10615'),('10616'),('10617'),('10618'),('10619'),('10620'),('10621'),('10622'),('10623'),('10624'),('10625'),('10626'),('10627'),('10628'),('10629'),('10630'),('10631'),('10632'),('10633'),('10634'),('10635'),('10636'),('10637'),('10638'),('10639'),('10640'),('10641'),('10642'),('10643'),('10644'),('10645'),('10646'),('10647'),('10648'),('10649'),('10650'),('10651'),('10652'),('10653'),('10654'),('10655'),('10656'),('10657'),('10658'),('10659'),('10660'),('10661'),('10662'),('10663'),('10664'),('10665'),('10666'),('10667'),('10668'),('10669'),('10670'),('10671'),('10672'),('10673'),('10674'),('10675'),('10676'),('10677'),('10678'),('10679'),('10680'),('10681'),('10682'),('10683'),('10684'),('10685'),('10686'),('10687'),('10688'),('10689'),('10690'),('10691'),('10692'),('10693'),('10694'),('10695'),('10696'),('10697'),('10698'),('10699'),('10700'),('10701'),('10702'),('10703'),('10704'),('10705'),('10706'),('10707'),('10708'),('10709'),('10710'),('10711'),('10712'),('10713'),('10714'),('10715'),('10716'),('10717'),('10718'),('10719'),('10720'),('10721'),('10722'),('10723'),('10724'),('10725'),('10726'),('10727'),('10728'),('10729'),('10730'),('10731'),('10732'),('10733'),('10734'),('10735'),('10736'),('10737'),('10738'),('10739'),('10740'),('10741'),('10742'),('10743'),('10744'),('10745'),('10746'),('10747'),('10748'),('10749'),('10750'),('10751'),('10752'),('10753'),('10754'),('10755'),('10756'),('10757'),('10758'),('10759'),('10760'),('10761'),('10762'),('10763'),('10764'),('10765'),('10766'),('10767'),('10768'),('10769'),('10770'),('10771'),('10772'),('10773'),('10774'),('10775'),('10776'),('10777'),('10778'),('10779'),('10780'),('10781'),('10782'),('10783'),('10784'),('10785'),('10786'),('10787'),('10788'),('10789'),('10790'),('10791'),('10792'),('10793'),('10794'),('10795'),('10796'),('10797'),('10798'),('10799'),('10800'),('10801'),('10802'),('10803'),('10804'),('10805'),('10806'),('10807'),('10808'),('10809'),('10810'),('10811'),('10812'),('10813'),('10814'),('10815'),('10816'),('10817'),('10818'),('10819'),('10820'),('10821'),('10822'),('10823'),('10824'),('10825'),('10826'),('10827'),('10828'),('10829'),('10830'),('10831'),('10832'),('10833'),('10834'),('10835'),('10836'),('10837'),('10838'),('10839'),('10840'),('10841'),('10842'),('10843'),('10844'),('10845'),('10846'),('10847'),('10848'),('10849'),('10850'),('10851'),('10852'),('10853'),('10854'),('10855'),('10856'),('10857'),('10858'),('10859'),('10860'),('10861'),('10862'),('10863'),('10864'),('10865'),('10866'),('10867'),('10868'),('10869'),('10870'),('10871'),('10872'),('10873'); + +DROP TABLE IF EXISTS `bug_1034717`.`table2`; +CREATE TABLE `bug_1034717`.`table2` ( + field1 varchar(5) NOT NULL DEFAULT '', + PRIMARY KEY (field1) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO table2 VALUES ('00501'),('27835'),('27836'),('27837'),('27838'),('27839'),('27840'),('27841'),('27842'),('27843'),('27844'),('27845'),('27846'),('27848'),('27850'),('27856'),('27857'),('27859'),('27861'),('27862'),('27864'),('27865'),('27867'),('27868'),('27869'),('27870'),('27873'),('27874'),('27875'),('27876'),('27877'),('27880'),('27882'),('27883'),('27884'),('27885'),('27886'),('27901'),('27902'),('27903'),('27904'),('27905'),('27906'),('27907'),('27908'),('27909'),('27910'),('27911'),('27913'),('27914'),('27917'),('27918'),('27920'),('22001'),('22002'),('22003'),('22004'),('22005'),('22006'),('22007'),('22008'),('22009'),('22010'),('22011'),('22012'),('22013'),('22014'),('22015'),('22019'),('22020'),('22021'),('22022'),('22023'),('22024'),('22025'),('22026'),('22027'),('22028'),('22029'),('22030'),('22031'),('22032'),('22033'),('22034'),('22035'),('22036'),('22037'),('22038'),('22039'),('22040'),('22041'),('22077'),('22082'),('22083'),('22087'),('22089'),('22092'),('22093'),('22101'),('22102'),('22103'),('22104'),('22105'),('22106'),('22111'),('22112'),('22113'),('22114'),('22115'),('22116'),('22117'),('22118'),('22125'),('22126'),('22127'),('22129'),('22131'),('22132'),('22133'),('22134'),('22136'),('22138'),('22139'),('22141'),('22144'),('22145'),('22146'),('22148'),('22154'),('22155'),('22158'),('22160'),('22161'),('22164'),('22165'),('22166'),('22168'),('22170'),('22174'),('22175'),('22177'),('22178'),('22181'),('22185'),('22188'),('22189'),('22190'),('22191'),('22194'),('22195'),('22198'),('22199'),('22201'),('22203'),('22204'),('22205'),('22206'),('22207'),('22208'),('22213'),('22220'),('22221'),('22222'),('22223'),('22224'),('22225'),('22226'),('22227'),('22228'),('22229'),('22230'),('22247'),('22248'),('22249'),('22250'),('22251'),('22252'),('22253'),('22255'),('22256'),('22257'),('22258'),('22259'),('22260'),('22261'),('22262'),('22263'),('22264'),('22266'),('22267'),('22270'),('22271'),('22272'),('22273'),('22274'),('22275'),('22276'),('22277'),('22278'),('22279'),('22280'),('22281'),('22282'),('22283'),('22284'),('22286'),('22287'),('22288'),('22290'),('22294'),('22295'),('22296'),('22297'),('22303'),('22304'),('22305'),('22310'),('22311'),('22312'),('22314'),('22315'),('22320'),('22321'),('22322'),('22323'),('22324'),('22325'),('22326'),('22327'),('22328'),('22329'),('22330'),('22331'),('22332'),('22333'),('22335'),('22336'),('22342'),('22343'),('22344'),('22345'),('22346'),('22348'),('22349'),('22350'),('22351'),('22352'),('22353'),('22354'),('22355'),('22356'),('22357'),('22358'),('22359'),('22360'),('22361'),('22362'),('22363'),('22364'),('22365'),('22366'),('22367'),('22368'),('22373'),('22374'),('22375'),('22376'),('22377'),('22378'),('22380'),('22381'),('22382'),('22383'),('22384'),('22385'),('22386'),('22387'),('22388'),('22390'),('22391'),('22392'),('22393'),('22394'),('22395'),('22396'),('22397'),('22398'),('22401'),('22402'),('22403'),('22404'),('22405'),('22406'),('22407'),('22408'),('22409'),('22411'),('22412'),('22413'),('22415'),('22416'),('22417'),('22418'),('22419'),('22421'),('22422'),('22424'),('22430'),('22431'),('22433'),('22438'),('22439'),('22443'),('22444'),('22445'),('22446'),('22447'),('22448'),('22464'),('22465'),('22466'),('22467'),('22471'),('22481'),('22490'),('22493'),('22496'),('22497'),('22498'),('22499'),('22501'),('22502'),('22503'),('22504'),('22505'),('22506'),('22507'),('22508'),('22509'),('22511'),('22512'),('22513'),('22516'),('22520'),('22522'),('22524'),('22526'),('22527'),('22528'),('22530'),('22531'),('22532'),('22533'),('22535'),('22536'),('22537'),('22538'),('22539'),('22540'),('22541'),('22542'),('22544'),('22546'),('22547'),('22548'),('22550'),('22552'),('22555'),('22556'),('22557'),('22558'),('22559'),('22560'),('22561'),('22562'),('22563'),('22564'),('22565'),('22566'),('22568'),('22569'),('22570'),('22571'),('22572'),('22575'),('22576'),('22577'),('22579'),('22580'),('22581'),('22582'),('22583'),('22584'),('22585'),('22586'),('22587'),('22588'),('22589'),('22590'),('22591'),('22592'),('22593'),('22595'),('22596'),('22597'),('22599'),('22601'),('22602'),('22603'),('22604'),('22605'),('22606'),('22607'),('22609'),('22610'),('22611'),('22612'),('22613'),('22614'),('22616'),('22617'),('22619'),('22620'),('22621'),('22622'),('22623'),('22624'),('22625'),('22626'),('22628'),('22629'),('22631'),('22632'),('22635'),('22637'),('22638'),('22639'),('22640'),('22641'),('22642'),('22643'),('22644'),('22645'),('22647'),('22648'),('22649'),('22650'),('22651'),('22660'),('22661'),('22662'),('22663'),('22664'),('22665'),('22666'),('22668'),('22670'),('22671'),('22672'),('22673'),('22674'),('22675'),('22682'),('22683'),('22684'),('22685'),('22686'),('22687'),('22801'),('22802'),('22807'),('22811'),('22812'),('22813'),('22814'),('22815'),('22816'),('22817'),('22819'),('22821'),('22822'),('22823'),('22824'),('22826'),('22827'),('22828'),('22829'),('22830'),('22831'),('22832'),('22833'),('22834'),('22836'),('22837'),('22840'),('22841'),('22843'),('22844'),('22845'),('22846'),('22847'),('22848'),('22849'),('22850'),('22851'),('22852'),('22853'),('22855'),('22860'),('22862'),('22901'),('22902'),('22903'),('22904'),('22907'),('22908'),('22909'),('22920'),('22921'),('22922'),('22923'),('22925'),('22926'),('22930'),('22932'),('22933'),('22934'),('22935'),('22936'),('22944'),('22950'),('22951'),('22952'),('22953'),('26001'),('26003'),('26004'),('26005'),('26006'),('26008'),('26009'),('26011'),('26012'),('26013'),('26014'),('26016'),('26017'),('26018'),('26019'),('26020'),('26021'),('26022'),('26023'),('26025'),('26026'),('26027'),('26029'),('26030'),('26031'),('26032'),('26033'),('26034'),('26036'),('26101'),('26102'),('26103'),('26104'),('26105'),('26107'),('26109'),('26110'),('26111'),('26113'),('26114'),('26115'),('26122'),('26123'),('26124'),('26125'),('26126'),('26128'),('26129'),('26130'),('26131'),('26133'),('26134'),('26135'),('26136'),('26137'),('26138'),('26139'),('26140'),('26141'),('26143'),('26144'),('26146'),('26147'),('26148'),('26149'),('26150'),('26151'),('26152'),('26153'),('26154'),('26155'),('26156'),('26157'),('26158'),('26163'),('26164'),('26166'),('26167'),('26169'),('26170'),('26171'),('26173'),('26174'),('26176'),('26179'),('26180'),('26181'),('26185'),('26201'),('26202'),('26203'),('26204'),('26205'),('26206'),('26207'),('26208'),('26209'),('26210'),('26211'),('26619'),('26620'),('26621'),('26622'),('26623'),('26624'),('26625'),('26626'),('26627'),('26628'),('26629'),('26630'),('26631'),('26632'),('26633'),('26634'),('26635'),('26636'),('26637'),('26638'),('26639'),('26640'),('26641'),('26643'),('26644'),('26645'),('26647'),('26648'),('26649'),('26650'),('26651'),('26652'),('26653'),('26654'),('26655'),('26656'),('26657'),('26658'),('26659'),('26660'),('26661'),('26662'),('26663'),('26664'),('26665'),('26666'),('26667'),('26668'),('26669'),('26670'),('26671'),('26672'),('26674'),('26675'),('26676'),('26677'),('26678'),('26679'),('26680'),('26681'),('26682'),('26683'),('26684'),('26685'),('26686'),('26687'),('26688'),('26689'),('26690'),('26691'),('26692'),('26693'),('26694'),('26695'),('26697'),('26701'),('26702'),('26703'),('26704'),('26705'),('26706'),('26707'),('26708'),('26709'),('26710'),('26711'),('26712'),('26714'),('26716'),('26720'),('26721'),('26722'),('26723'),('26724'),('26725'),('26726'),('26727'),('26729'),('26730'),('26731'),('26732'),('26733'),('26734'),('26736'),('26737'),('26738'),('26739'),('26740'),('26741'),('26743'),('26744'),('26745'),('26746'),('26747'),('26748'),('26749'),('26750'),('26751'),('26752'),('26753'),('26754'),('26755'),('26756'),('26757'),('26758'),('26759'),('26760'),('26761'),('26762'),('26763'),('26764'),('26765'),('26766'),('26767'),('26768'),('26769'),('26770'),('26771'),('26772'),('26773'),('26774'),('26775'),('26776'),('26777'),('26778'),('26780'),('26781'),('26782'),('26783'),('26784'),('26785'),('26786'),('26788'),('26789'),('26790'),('26791'),('26801'),('26802'),('26803'),('26811'),('26812'),('26820'),('26821'),('26824'),('26825'),('26826'),('26827'),('26829'),('26830'),('26832'),('26833'),('26835'),('26836'),('26840'),('26841'),('26850'),('26901'),('26903'),('26918'),('26919'),('26921'),('26922'),('26923'),('26929'),('26950');