I very much like Craig/Axel's idea of being able to tag certain property
keys such that their related values go through a (de)serialisation handler
on read/write. The implementation could use the plugin mechanism to
register converters that implement custom read/write routines, something
like:
public class StringToDateConverter implements PropertyConverter<String,
Date> {
private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
public Date read(String value) {
return formatter.parse(value);
}
public String write(Date value) {
return formatter.format(value);
}
}
Then these could be registered in Cypher, much like indexes, to match
property keys that are named in a particular way...
CREATE HANDLER FOR '.*_date' USING 'StringToDateConverter'
There would certainly be some challenges to overcome though, not least with
exception handling and REST serialisation, but I daresay these aren't
insurmountable.
Nige
On 28 December 2013 05:10, Alan Robertson <[email protected]> wrote:
> On 12/07/2013 02:58 AM, Michael Hunger wrote:
>
> Let's move this whole discussion to the google group :)
>
> Map support for properties is planned and almost made it into the
> product some time ago but then were some considerations so that it sadly
> didn't work out.
>
> User defined functions would be a way to go but much better with real
> support by the storage engine and language.
>
> Wes, didn't you want to look into a UDF PoC?
>
>
> Here is a very specific and real use case for such a user defined function
> (or map capability) for JSON:
>
> I have a discovery item in JSON which collects ulimit values and looks
> like this:
> {
> "discovertype": "ulimit",
> "description": "ulimit values for root",
> "host": "servidor",
> "source": "/usr/share/assimilation/discovery_agents/ulimit",
> "data": {
> "hard": {"c":null,"d":null,"f":null,"l":64,"m":null,*"n":1024*
> ,"p":47013,"s":null,"t":null,"v":null},
> "soft": {"c":0,"d":null,"f":null,"l":64,"m":null,*"n":1024*
> ,"p":47013,"s":8192,"t":null,"v":null}
> }
> }
>
>
> This is the results of the ulimit discovery module. I used the JSON value
> null to represent the ulimit value unlimited.
>
> One of those flags (-*n*) is the maximum number of open files. As you
> can see, this example is out of compliance with Neo4j best practices ;-).
>
> This is in a field called JSON_ulimit.
>
> So, if I wanted to see if a machine had enough open files to follow neo4j
> best practices, I would like to check *JSON_ulimit.data.soft.n* and see
> if it was greater or equal to 50000 (or null) on every machine running
> neo4j.
>
> As it is now, I can't do this in Cypher. I have to do it in python (or
> Java, or...)
>
> I'd love to have a way to do this in Cypher.
>
> *Michael: *Could I represent this data and perform this query with the
> proposed map capability?
> *Wes:* Could you make such a query work with a user-defined function?
>
> Don't you want me to be able to tell your customers they're not in
> compliance with Neo4j best practices? :-D
>
>
>
> --
> Alan Robertson <[email protected]> <[email protected]> - @OSSAlanR
>
> "Openness is the foundation and preservative of friendship... Let me claim
> from you at all times your undisguised opinions." - William Wilberforce
>
> --
> You received this message because you are subscribed to the Google Groups
> "Neo4j" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
--
You received this message because you are subscribed to the Google Groups
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.