On 16/11/2007, Sam Mason <[EMAIL PROTECTED]> wrote: > Hi All, > > I've been writing some code[1] to support Javascript in the backend. > I've got the basic bits working, the next job for me is implementing > SPI support. Currently, it runs simple bits of code like the > following: > > CREATE FUNCTION jsinc(n INTEGER) RETURNS INTEGER LANGUAGE pljs AS $$ > return n+1; > $$;
nice Pavel > > It knows to compile the code inside a javascript function, passing the > parameters with the specified names. If no names are specified, $n > style naming is used--Javascript nicely deviates from C syntax in > respect of allowing $ in parameter names. It knows how to handle > boolean and numeric (int[248], float[48] and numeric) types are known > about at the moment. Javascript has only one numeric type, so > everything behaves as a double. > > For SPI, I'm thinking that I'd currently like to attempt some object > orientated style interface. In simplest terms, it would look a bit > like this: > > portal = { > next : function () { return {} } > close : function () { } > } > > plan = { > query : function (args,readonly) { return portal; } > execute : function (args) { } > close : function () { } > } > > spi = { > prepare : function (sql,argtypes) { return plan; } > } > > So running some SQL would probably look something like: > > for (row in spi.prepare("SELECT 1 AS n").query()) { > print(row.n); > } > > The spi object would be passed into the javascript function as an extra > parameter, maybe with the name "__spi" to avoid name clashes. > > I may put some shortcuts in if things turn out to be too slow later > on, but I'd prefer not to. Most other languages seem to expose the > SPI functions directly, but that seems like a bit of a waste in a > language that should be able to do OO stuff. PL/Java seems to have > its hands tied with JDBC, so I can't look there for much inspiration. > Are there any other OO languages that do things well? > > > Let me know what you think! > > > Sam > > p.s. the main reason for doing this is because I think Javascript is a > nice language!. Having said that, Nulls are handled very badly by > javascript, so (1+null = 1) and ("_"+null+"_" = "_null_")! > > [1] http://xen.samason.me.uk/~sam/repos/pljs/ > > It's definitely work in progress! I have fun with header > clashes between Postgres and Spidermonkey---hence the split > into C files. > > ---------------------------(end of broadcast)--------------------------- > TIP 7: You can help support the PostgreSQL project by donating at > > http://www.postgresql.org/about/donate > ---------------------------(end of broadcast)--------------------------- TIP 5: don't forget to increase your free space map settings