Lms-teryt niee merguje
Witam.
Zabrałem się dzisiaj za SIIS i widze, że lms-teryt nie znajduje ulic ani miejscowosci. Znajduje troche, jezeli uzupelnie pole location w nodes.
Ten patch troche to naprawia:
devel bin # diff -u lms-teryt /tmp/lmsgit-lms-e75b2dd/bin/lms-teryt --- lms-teryt 2012-03-12 14:14:03.000000000 +0100 +++ /tmp/lmsgit-lms-e75b2dd/bin/lms-teryt 2012-03-12 05:33:18.000000000 +0100 @@ -688,7 +688,7 @@ my $street_get = $dbase->prepare("SELECT s.id, s.cityid FROM location_streets s JOIN location_cities c ON (s.cityid = c.id) - WHERE ".($dbtype =~ /mysql/ ? "CONCAT(COALESCE(s.name2,''), s.name)" : "(s.name2 || s.name)")." = ? AND c.name = ? + WHERE ".($dbtype =~ /mysql/ ? "CONCAT(s.name2, s.name)" : "(s.name2 || s.name)")." = ? AND c.name = ? ORDER BY c.cityid LIMIT 1"); my $city_get = $dbase->prepare("SELECT id FROM location_cities
Problemem wydaje się być w mysql CONCAT null ze stringiem..
mysql> select CONCAT(NULL, 'string') -> ; +------------------------+ | CONCAT(NULL, 'string') | +------------------------+ | NULL | +------------------------+ 1 row in set (0.00 sec)
mysql> select CONCAT('string', NULL) -> ; +------------------------+ | CONCAT('string', NULL) | +------------------------+ | NULL | +------------------------+ 1 row in set (0.00 sec)
Pozdrawiam.
W dniu 12.03.2012 14:24, Przemysław Kudyba napisał(a):
Witam.
Witaj.
Zabrałem się dzisiaj za SIIS i widze, że lms-teryt nie znajduje ulic ani miejscowosci. Znajduje troche, jezeli uzupelnie pole location w nodes.
Ten patch troche to naprawia:
devel bin # diff -u lms-teryt /tmp/lmsgit-lms-e75b2dd/bin/lms-teryt --- lms-teryt 2012-03-12 14:14:03.000000000 +0100 +++ /tmp/lmsgit-lms-e75b2dd/bin/lms-teryt 2012-03-12 05:33:18.000000000 +0100 @@ -688,7 +688,7 @@ my $street_get = $dbase->prepare("SELECT s.id, s.cityid FROM location_streets s JOIN location_cities c ON (s.cityid = c.id)
WHERE ".($dbtype =~ /mysql/ ? "CONCAT(COALESCE(s.name2,''),
s.name)" : "(s.name2 || s.name)")." = ? AND c.name = ?
WHERE ".($dbtype =~ /mysql/ ? "CONCAT(s.name2, s.name)" :
"(s.name2 || s.name)")." = ? AND c.name = ? ORDER BY c.cityid LIMIT 1"); my $city_get = $dbase->prepare("SELECT id FROM location_cities
Problemem wydaje się być w mysql CONCAT null ze stringiem..
mysql> select CONCAT(NULL, 'string') -> ; +------------------------+ | CONCAT(NULL, 'string') | +------------------------+ | NULL | +------------------------+ 1 row in set (0.00 sec)
mysql> select CONCAT('string', NULL) -> ; +------------------------+ | CONCAT('string', NULL) | +------------------------+ | NULL | +------------------------+ 1 row in set (0.00 sec)
Pozdrawiam.
Zobacz: mysql> SELECT CONCAT(COALESCE(NULL, ''), 'ala'); +-----------------------------------+ | CONCAT(COALESCE(NULL, ''), 'ala') | +-----------------------------------+ | ala | +-----------------------------------+ 1 row in set (0.00 sec)
więc akurat zmiana na CONCAT(s.name2, s.name) to krok nie w tym kierunku co trzeba. Chyba, że coś źle zroxumiałem...
On Mon, Mar 12, 2012 at 02:24:52PM +0100, Przemysław Kudyba wrote:
Witam.
Zabrałem się dzisiaj za SIIS i widze, że lms-teryt nie znajduje ulic ani miejscowosci. Znajduje troche, jezeli uzupelnie pole location w nodes.
Ten patch troche to naprawia:
devel bin # diff -u lms-teryt /tmp/lmsgit-lms-e75b2dd/bin/lms-teryt --- lms-teryt 2012-03-12 14:14:03.000000000 +0100 +++ /tmp/lmsgit-lms-e75b2dd/bin/lms-teryt 2012-03-12 05:33:18.000000000 +0100 @@ -688,7 +688,7 @@ my $street_get = $dbase->prepare("SELECT s.id, s.cityid FROM location_streets s JOIN location_cities c ON (s.cityid = c.id)
WHERE ".($dbtype =~ /mysql/ ? "CONCAT(COALESCE(s.name2,''),
s.name)" : "(s.name2 || s.name)")." = ? AND c.name = ?
WHERE ".($dbtype =~ /mysql/ ? "CONCAT(s.name2, s.name)" :
"(s.name2 || s.name)")." = ? AND c.name = ? ORDER BY c.cityid LIMIT 1"); my $city_get = $dbase->prepare("SELECT id FROM location_cities
dodatkowo z tego co widzę skrypt nie rozpoznaje adresów w stylu: ul. Nijaka 1 m. 12 czy też ul. Nijaka 1/2 m. 40 U mnie wszystkie adresy są w tej postaci, gdyż jakiś czas temu zrobiłem selektorka adresu do wybierania adresów przy dodawaniu klienta.
W dniu 12.03.2012 15:15, Przemysław 'Repcio' Gubernat napisał(a):
On Mon, Mar 12, 2012 at 02:24:52PM +0100, Przemysław Kudyba wrote:
Witam.
Zabrałem się dzisiaj za SIIS i widze, że lms-teryt nie znajduje ulic ani miejscowosci. Znajduje troche, jezeli uzupelnie pole location w nodes.
Ten patch troche to naprawia:
devel bin # diff -u lms-teryt /tmp/lmsgit-lms-e75b2dd/bin/lms-teryt --- lms-teryt 2012-03-12 14:14:03.000000000 +0100 +++ /tmp/lmsgit-lms-e75b2dd/bin/lms-teryt 2012-03-12 05:33:18.000000000 +0100 @@ -688,7 +688,7 @@ my $street_get = $dbase->prepare("SELECT s.id, s.cityid FROM location_streets s JOIN location_cities c ON (s.cityid = c.id)
WHERE ".($dbtype =~ /mysql/ ? "CONCAT(COALESCE(s.name2,''),
s.name)" : "(s.name2 || s.name)")." = ? AND c.name = ?
WHERE ".($dbtype =~ /mysql/ ? "CONCAT(s.name2, s.name)" :
"(s.name2 || s.name)")." = ? AND c.name = ? ORDER BY c.cityid LIMIT 1"); my $city_get = $dbase->prepare("SELECT id FROM location_cities
dodatkowo z tego co widzę skrypt nie rozpoznaje adresów w stylu: ul. Nijaka 1 m. 12 czy też ul. Nijaka 1/2 m. 40 U mnie wszystkie adresy są w tej postaci, gdyż jakiś czas temu zrobiłem selektorka adresu do wybierania adresów przy dodawaniu klienta.
Przemku zajrzyj w lms-teryt do treści funkcji location_update i spójrz na fragment przy komentarzu # get house/flat. Następnie spróbuj dostosować tamtejsze wyrażenia regularne również do Twego wariantu zapisu. Jeśli to teraz zrobimy dobrze to przy następnych aktualizacjach LMS-a zaprocentuje to wszystkim, bo wkrótce pozwolimy na składowanie adresów klienta również w postaciach tj. własnej i zgodnej z TERYT.
+-=-=- Przemysław Gubernat repcio@repcio.net -=-=-=-=-=-=-+
On Mon, Mar 12, 2012 at 03:21:55PM +0100, Tomasz Chiliński wrote:
Przemku zajrzyj w lms-teryt do treści funkcji location_update i spójrz na fragment przy komentarzu # get house/flat. Następnie spróbuj dostosować tamtejsze wyrażenia regularne również do Twego wariantu zapisu. Jeśli to teraz zrobimy dobrze to przy następnych aktualizacjach LMS-a zaprocentuje to wszystkim, bo wkrótce pozwolimy na składowanie adresów klienta również w postaciach tj. własnej i zgodnej z TERYT.
Poniżej diff, dodatkowo zmieniłem szukanie miasta. Mianowicie przy większych miastach (np. Wrocław) ulice nie znajduja się przy mieście Wrocław, a przy dzielnicy (np. Wrocław-Fabryczna). Wobec czego przy aktualnym adresie w LMS-ie nic nie znajduje.
--- ./bin/lms-teryt 2012-03-12 15:26:09.000000000 +0100 +++ ./bin/lms-teryt-tvk 2012-03-13 02:15:57.000000000 +0100 @@ -622,7 +622,12 @@ printf("%s (%04d) %s: ", $row->{'name'}, $row->{'id'}, $addr) if not $quiet;
# get house/flat - if ($addr =~ /\s([0-9-]+\s*[a-z]*)$/i) { + if ($addr =~ /\s(([0-9-/]+\s*[a-z]*)\ m.\ ([0-9a-z/]+))$/i) { + $addr = substr($addr, 0, -1 * length($1)); + $house = $2; + $flat = $3; + } + elsif ($addr =~ /\s([0-9-]+\s*[a-z]*)$/i) { $addr = substr($addr, 0, -1 * length($1)); $house = $1; } @@ -649,7 +654,7 @@
# find location_street and/or location_city IDs if ($street && $city) { - $street_get->execute($street, $city); + $street_get->execute($street, "^$city.*"); if (my $srow = $street_get->fetchrow_hashref()) { $street_id = $srow->{'id'}; $city_id = $srow->{'cityid'}; @@ -688,7 +693,7 @@ my $street_get = $dbase->prepare("SELECT s.id, s.cityid FROM location_streets s JOIN location_cities c ON (s.cityid = c.id) - WHERE ".($dbtype =~ /mysql/ ? "CONCAT(COALESCE(s.name2, ''), s.name)" : "(COALESCE(s.name2, '') || s.name)")." = ? AND c.name = ? + WHERE ".($dbtype =~ /mysql/ ? "CONCAT(COALESCE(s.name2, ''), s.name)" : "(COALESCE(s.name2, '') || s.name)")." = ? AND c.name REGEXP ? ORDER BY c.cityid LIMIT 1"); my $city_get = $dbase->prepare("SELECT id FROM location_cities
PS. Jak mogę uzyskać możliwość commitowania/zgłaszania poprawek ?
uczestnicy (3)
-
Przemysław 'Repcio' Gubernat
-
Przemysław Kudyba
-
Tomasz Chiliński