October 08, 2003

Parrot advances

Or at least exploitation of advances.

Parrot's had the facilities in it to call native functions for quite some time (months, possibly upwards of a year) but we've really not used it any--it's just not solved any real problems for folks doing parrot development. Well, since I'm looking at parrot as a target for production work, I've started using it. At the moment, as part of the parrot repository, there are interface files for ncurses (base and form lib) and PostgreSQL.

There's an ncurses version of life in the examples/assembly directory as well, if you want to play around with it. (It's in PIR format, so it's a touch tough to decipher by hand, though if you go back some versions in CVS you'll find a more readable version) Useful? Well... no, not really, at least not at the moment. (Though I need the ncurses and forms stuff for work) Cool, though.

The PostgreSQL interface is also really keen, in its own way. (Though I'm already a touch annoyed with the connection scheme for Postgres. Polling. Bleah) It means, with a bit of code--like, say:

.pcc_sub _MAIN prototyped
	.param pmc argv
.include "postgres.pasm"
  P17 = global "PostgreSQL::PQconnectStart"
  P0 = P17
  S5 = "host=dbhost dbname=sbinstance user=username password=somepassword"

  P18 = P5
  P0 = global "PostgreSQL::PQconnectPoll"

  print "status: "
  print I5
  print "\n"

  eq 3, I5, continue
  eq 0, I5, panic
  sleep 1
  branch retry

  print "Argh! Failed\n"

  P0 = global "PostgreSQL::PQexec"
  P5 = P18
  S5 = "create table foo (bar int)"

  P0 = global "PostgreSQL::PQresultErrorMessage"

  print S5
  print "\n"

You can add a new table, foo, to your postgres database. Presumably other things too, I've just not written the PIR to do it. (Though the full PostgreSQL 7.3 C interface is wrapped)

Dunno whether this counts as scary, or really cool. Or, I suppose, both. :) Posted by Dan at October 8, 2003 11:09 AM | TrackBack (0)


And I thought my calling the Windows API was scary. It may take some therapy to get over this one...

Posted by: Clinton at October 9, 2003 04:56 PM

Nah, this one was pretty simple, outside of realizing that the connect call wasn't a blocking call and you had to loop and wait for it to be done.

I see the formatting's kinda scary, though. I may have to go fix that.

Posted by: Dan at October 9, 2003 11:01 PM