WFS request met lang filter geeft foutmelding

Hoi @rli, dat is dus het tegenovergestelde wat @RoelvandenBerg zegt.

Het is niet een tekortkoming in Mapserver maar de backend (de GPKG in dit geval)
Er zijn nu eenmaal limieten aan wat er aan een backend/datastore redelijkerwijs te vragen is, in dit geval de SQLITE_LIMIT_EXPR_DEPTH waar er met deze query tegenaanlopen wordt.
M.a.w. bij Geoserver (QGIS server, of wat dan ook…) was dit ook opgetreden met eenzelfde backend (met een vergelijkbare query generatie).

Zo heeft iedere backend zijn grenzen van wat mogelijk is of dat nu Postgresql/PostGIS, GPKG, SHP, enz… is.

Misschien kan @RoelvandenBerg de SQL query die gegeneerd/uitgevoerd wordt posten voor de volledigheid. Dit kan een indruk geven van de complexiteit en misschien kunnen we kijken naar hoe dit mogelijk te ‘versimpelen’ is?

Oke, geen Mapserver probleem zo lijkt maar database/backend.
De nesting is niet erg diep, het gaat om 3 niveaus:
1e niveau: Een OR op X aantal adressen
2e niveau: Een AND op 4 adresvelden (postcode, huisnummer, huisletter, toevoeging)
3e niveau: Een OR voor de adresvelden huisletter en toevoeging (voor NULL en lege waarde)
De nesting diepte lijkt ook niet het probleem want die verandert niet of je 10 adressen in de OR hebt op het eerste niveau of 30 adressen. Bij 10 adressen gaat het goed maar bij 30 niet.

Het lijkt me niet dat Oracle of PostgreSQL daar een probleem mee zouden hebben, in ieder geval Oracle lijkt me sterk.

Wauw, ik had niet verwacht dat achter de PDOK BAG WFS een GPKG zou hangen! :open_mouth:

Ter onderbouwing hier de query (mogelijk wat rare formatting, maar dit geeft wel een beeld van de opbouw, scroll voor de eennalaatste regels vooral ook naar rechts):

 SELECT "verblijfsobject"."identificatie" AS "identificatie",
       "verblijfsobject"."rdf_seealso" AS "rdf_seealso",
       "verblijfsobject"."oppervlakte" AS "oppervlakte",
       "verblijfsobject"."status" AS "status",
       "verblijfsobject"."gebruiksdoel" AS "gebruiksdoel",
       "verblijfsobject"."openbare_ruimte" AS "openbare_ruimte",
       "verblijfsobject"."huisnummer" AS "huisnummer",
       "verblijfsobject"."huisletter" AS "huisletter",
       "verblijfsobject"."toevoeging" AS "toevoeging",
       "verblijfsobject"."postcode" AS "postcode",
       "verblijfsobject"."woonplaats" AS "woonplaats",
       "verblijfsobject"."bouwjaar" AS "bouwjaar",
       "verblijfsobject"."pandidentificatie" AS "pandidentificatie",
       "verblijfsobject"."pandstatus" AS "pandstatus",
       "verblijfsobject"."puuid" AS "puuid",
       "verblijfsobject"."fuuid" AS "fuuid",
       "verblijfsobject"."geom" AS "geom"
FROM "verblijfsobject" WHERE (
    (
        (
            ("verblijfsobject"."postcode" = '8932JP') AND
            (
                ("verblijfsobject"."huisnummer" = 6.000000) AND
                (
                    (
                        ("verblijfsobject"."huisletter" IS NULL) OR
                        ("verblijfsobject"."huisletter" = '')
                    ) AND
                (
                    ("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = '')
                    )
                )
            )
        ) OR
        (
            (
                ("verblijfsobject"."postcode" = '8921AB') AND
                (
                    ("verblijfsobject"."huisnummer" = 89.000000) AND (
                        (
                            ("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')
                        ) AND (
                            ("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = '')
                        )
                    )
                )
            ) OR (
                    (
                        ("verblijfsobject"."postcode" = '8921BE') AND (
                            ("verblijfsobject"."huisnummer" = 28.000000) AND (
                                (
                                    ("verblijfsobject"."huisletter" IS NULL) OR
                                    ("verblijfsobject"."huisletter" = '')
                                ) AND (
                                        ("verblijfsobject"."toevoeging" IS NULL) OR
                                        ("verblijfsobject"."toevoeging" = '')
                                    )
                                )
                            )
                    ) OR ((("verblijfsobject"."postcode" = '8934BL') AND (("verblijfsobject"."huisnummer" = 144.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932EM') AND (("verblijfsobject"."huisnummer" = 35.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8933BP') AND (("verblijfsobject"."huisnummer" = 22.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8934BD') AND (("verblijfsobject"."huisnummer" = 43.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8921AB') AND (("verblijfsobject"."huisnummer" = 91.000000) AND (("verblijfsobject"."huisletter" = 'a') AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932KA') AND (("verblijfsobject"."huisnummer" = 14.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8921AE') AND (("verblijfsobject"."huisnummer" = 29.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8921AE') AND (("verblijfsobject"."huisnummer" = 29.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8933BN') AND (("verblijfsobject"."huisnummer" = 13.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932HP') AND (("verblijfsobject"."huisnummer" = 24.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8911GV') AND (("verblijfsobject"."huisnummer" = 84.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8934AP') AND (("verblijfsobject"."huisnummer" = 33.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8933CA') AND (("verblijfsobject"."huisnummer" = 24.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8921AW') AND (("verblijfsobject"."huisnummer" = 22.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932AX') AND (("verblijfsobject"."huisnummer" = 29.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8911LD') AND (("verblijfsobject"."huisnummer" = 3.000000) AND (("verblijfsobject"."huisletter" = 'a') AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932HM') AND (("verblijfsobject"."huisnummer" = 9.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932HM') AND (("verblijfsobject"."huisnummer" = 9.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8933DT') AND (("verblijfsobject"."huisnummer" = 40.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932PD') AND (("verblijfsobject"."huisnummer" = 1.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932KL') AND (("verblijfsobject"."huisnummer" = 18.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8932PD') AND (("verblijfsobject"."huisnummer" = 1.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8921AE') AND (("verblijfsobject"."huisnummer" = 31.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8921AE') AND (("verblijfsobject"."huisnummer" = 25.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8933BS') AND (("verblijfsobject"."huisnummer" = 14.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR ((("verblijfsobject"."postcode" = '8911LD') AND (("verblijfsobject"."huisnummer" = 7.000000) AND (("verblijfsobject"."huisletter" = 'a') AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = ''))))) OR (("verblijfsobject"."postcode" = '8925GM') AND (("verblijfsobject"."huisnummer" = 57.000000) AND ((("verblijfsobject"."huisletter" IS NULL) OR ("verblijfsobject"."huisletter" = '')) AND (("verblijfsobject"."toevoeging" IS NULL) OR ("verblijfsobject"."toevoeging" = '')
                        )))))))))))))))))))))))))))))))))) LIMIT 1001 OFFSET 0);

Vrijwel alles heeft een GPKG backend (m.u.v. een aantal legacy stacks op de ouwe infrastructuur)

(beetje off topic) uit nieuwsgierigheid, waarom zou je het niet verwachten? :smiley:

1 like

De haakjes gaan steeds dieper, daar gaat iets niet goed.
Ik had dit verwacht:
FROM “verblijfsobject” WHERE (
(
(
(“verblijfsobject”.“postcode” = ‘8932JP’) AND
(“verblijfsobject”.“huisnummer” = 6.000000) AND
((“verblijfsobject”.“huisletter” IS NULL) OR (“verblijfsobject”.“huisletter” = ‘’)) AND
((“verblijfsobject”.“toevoeging” IS NULL) OR (“verblijfsobject”.“toevoeging” = ‘’))
) OR
(
(“verblijfsobject”.“postcode” = ‘8921AB’) AND
(“verblijfsobject”.“huisnummer” = 89.000000) AND
((“verblijfsobject”.“huisletter” IS NULL) OR (“verblijfsobject”.“huisletter” = ‘’)) AND
((“verblijfsobject”.“toevoeging” IS NULL) OR (“verblijfsobject”.“toevoeging” = ‘’))
) OR

Dat beoog ik althans met mijn filter. Ik dacht dat mijn filter goed was opgebouwd.

Ik dacht daar hangt een “echte” database achter. PostgreSQL ofzo, multi-user. Maar ik vind het juist goed nieuws hoor!

1 like