Now who's talking crazy!  :)

+0 on using a full templating language.  Seems perhaps a bit of overkill
for the immediate need?  The "macro language" already discussed would
suffice for the immediate need I think?

Whatever the syntax used, it seems like the solution has to:

- allow altering the geometry column expression based on whether the
context is a WMS rendering request or something else (data request,
preliminary scan for query schema, etc)
- avoid adding an extra spatial filter if one is already provided (or
alternatively, add it in such a way that the DB doesn't squawk)

To take another slant on this, I  realized that the source of the problem
is that for SQL views the "custom SQL" is wrapped in parens before the WMS
bbox filter condition is appended to it. This is what's causing the DB to
complain that the geometry column expression doesn't have an index.  If
there was a way to avoid using the parens that would solve the problem
nicely (there would be no need for any macros in the user-supplied SQL,
they could use any expression around the GEOMETRY column (renaming it to
GEOMETRY) and they wouldn't have to supply their own bbox filter
condition.  One issue is deciding how to append the bbox condition - it
would be necessary to know whether or not a WHERE clause was already
present.  This could perhaps be determined by a flag supplied by the user.


On Wed, Mar 11, 2015 at 9:22 PM, Andrea Aime <andrea.a...@geo-solutions.it>
wrote:

> On Thu, Mar 12, 2015 at 1:15 AM, Martin Davis <mtncl...@gmail.com> wrote:
>
>> Uuuh... the result might become very confusing... in the simple case you
>>> might want to just change a function call,
>>> in the complex one you might have to rewrite half of the query.
>>>
>>
>> Well, let's not let the best be the enemy of the good.  I'd be happy if
>> the "simple" case was handled.
>>
>
> So I've been talking about this with Jody, and he's been pretty horrified
> about what I proposed, but
> here it goes anyways: it seems to me that what you are looking for is some
> sort of templating language
> to write a query.
>
> Right now parametric queries are sort of our templating language, but to
> do what you want you
> need control structures that would emit different sql bits depending on
> the zoom level... so
> it seems to me that what you want is a freemarker template for sqlviews...
> and it would be up
> to you to make sure that whatever you write always returns the same
> _structure_, the same
> attribute names and types.
>
> There are of course ugly sides to this:
> * We'd need to add a relatively large dependency to gt-jdbc (freemarker,
> if we care for consistency
>    with what is alread in use in GeoServer) since the sql expansion is
> done there
> * We'd need to start passing in a set of "well known" variables to it,
> bbox, current zoom level, target
>   pixel size, and so on
>
>> * Checking that the template would not result in something easy to attack
> with sql injection would
>   be hard
>
> But it seems it would satisfy all your needs, and more
>
> Cheers
> Andrea
>
>
> --
> ==
> GeoServer Professional Services from the experts! Visit
> http://goo.gl/NWWaa2 for more information.
> ==
>
> Ing. Andrea Aime
> @geowolf
> Technical Lead
>
> GeoSolutions S.A.S.
> Via Poggio alle Viti 1187
> 55054  Massarosa (LU)
> Italy
> phone: +39 0584 962313
> fax: +39 0584 1660272
> mob: +39  339 8844549
>
> http://www.geo-solutions.it
> http://twitter.com/geosolutions_it
>
> *AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*
>
> Le informazioni contenute in questo messaggio di posta elettronica e/o
> nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
> loro utilizzo è consentito esclusivamente al destinatario del messaggio,
> per le finalità indicate nel messaggio stesso. Qualora riceviate questo
> messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
> darcene notizia via e-mail e di procedere alla distruzione del messaggio
> stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
> divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
> utilizzarlo per finalità diverse, costituisce comportamento contrario ai
> principi dettati dal D.Lgs. 196/2003.
>
>
>
> The information in this message and/or attachments, is intended solely for
> the attention and use of the named addressee(s) and may be confidential or
> proprietary in nature or covered by the provisions of privacy act
> (Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
> Code).Any use not in accord with its purpose, any disclosure, reproduction,
> copying, distribution, or either dissemination, either whole or partial, is
> strictly forbidden except previous formal approval of the named
> addressee(s). If you are not the intended recipient, please contact
> immediately the sender by telephone, fax or e-mail and delete the
> information in this message that has been received in error. The sender
> does not give any warranty or accept liability as the content, accuracy or
> completeness of sent messages and accepts no responsibility  for changes
> made after they were sent or for other risks which arise as a result of
> e-mail transmission, viruses, etc.
>
> -------------------------------------------------------
>
------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Geoserver-users mailing list
Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to