Another update. There is now a new command: SQL[8] which returns a list of all tables in the database.
Eventually SQL[9] will return a list of columns for a given table, but that's less important for now. Regards, Elias On 17 April 2014 23:52, Elias Mårtenson <loke...@gmail.com> wrote: > Latest update: > > The 2D matrix bind parameters is now implemented. Transaction support is > there (but not really tested yet). Bost SQLite and Postgres also works. > > There is also a .apl file with function definitions that smakes the API > look nicer. > > My next step is to get the available database libraries detected using > autoconf and otherwise integrate the build into GNU APL proper before I had > over the code to Jürgen if he wants to integrate. > > Ideally, I'd like there to be a very simple way to load this library (and > support APL code) straight out of a newly installed GNU APL installation. > That's why I've been talking about default directories for )COPY and > whatnot. :-) > > Regards, > Elias > > > On 15 April 2014 12:08, Elias Mårtenson <loke...@gmail.com> wrote: > >> On 15 April 2014 01:44, Blake McBride <blake1...@gmail.com> wrote: >> >>> In terms of connecting to PostgreSQL (and probably most other 'real' >>> databases), I think the connection string should have more (optional) >>> arguments separated by a comma. The ones I use everyday with PostgreSQL >>> are: >>> >>> driver=org.postgresql.Driver >>> url=jdbc:postgresql:mydatabase >>> user=userxyz >>> password=thepassword >>> >> >> I'm using Kerberos for authentication everywhere, which is why I don't >> have to include usernames or passwords in my connect strings, and all I had >> to specify was the host name. Of course you can add whatever connect >> options you want. >> >> The way I've built the SQL support is simular to JDBC in a sense. You >> specify the underlying database type (the argument to the left of the >> connect command) and everything on the right-hand side is passed to the >> backend. The SQLite backend only uses a single string (the file name) while >> the Postgres one passes it as a conninfo string. >> >> The conninfo strng is simply multiple parameters, separated by spaces >> where each parameter is of the form key=value. In other words, something >> like this: >> >> 'postgresql' SQL∆Connect "user=foo password=bar host=somehost" >> >> >>> >>> Of course this is an example from Java. C must have corresponding >>> parameters. (I hope you are not _requiring_ an ODBC setup.) >>> >> >> No, I don't require ODBC. Although it wouldn't be hard to implement an >> ODBC provider as well. >> >> >>> The point being that you cannot connect to a database by just knowing >>> where it is. You usually need a username and password so the database can >>> determine your access permissions. >>> >> >> Only if you're not using Kerberos. :-) >> >> But, like I said, using cleartext password in the connect sthing should >> work perfectly fine. It's just that I don't normally use it myself. >> >> >>> The driver option probably makes more sense for Java or if you are >>> linking (via static library or shared library) to a native PostgreSQL >>> library. But it can be useful if you are using runtime loading. >>> >> >> I'm not using any runtime loading for the driver. They are all linked >> into the lib_sql.so library. The availability of the different database >> libraries will probably be detected when running ./configure. >> >> >>> I'm sorry, I actually came from the APL world and not the APL2 world >>> (although I know what nested arrays are). I do not understand your >>> SQL∆Select >>> and SQL∆Exec lines do. Could you provide a brief explanation? >>> >> >> It's very simple. It's just a wrapper around the native variably entry >> point. So, instead of typing: >> >> * 'select * from foo where a=?' SQL[3,db] 10* >> >> You'd simply type: >> >> * 'select * from foo where a=?' SQL∆Select[db] 10* >> >> It's imply implemented by a wrapper function like this: >> >> ∇Z←query SQL∆Select[dbId] args >> Z←query SQL[3,dbId] args >> ∇ >> >> Thanks! >>> >> >> No problems. >> >> Regards, >> Elias >> >> >>> Blake >>> >>> >>> >>> On Mon, Apr 14, 2014 at 11:25 AM, Elias Mårtenson <loke...@gmail.com>wrote: >>> >>>> Just an update: Postgres support almost works now. I have some issues >>>> determining the correct data type of the returned values, but once that is >>>> resolved it's time to work on the 2D array arguments. >>>> >>>> I've changed SQL[1] (connect) to accept a left argument, being the >>>> database type. I will also make it register mnemonic functions so that you >>>> don't have to see the function numbers. Thus, once the 2D stuff is ready >>>> you'll be able to copy the content of "foo" in an SQLite database into >>>> table "bar" in a Postgres database like this: >>>> >>>> 'libsql' ⎕FX 'SQL' >>>> >>>> dbA ← 'sqlite' SQL∆Connect '/path/to/database' >>>> dbB ← 'postgresql' SQL∆Connect 'host=hostname.of.database.com' >>>> result ← 'select * from foo' SQL∆Select[dbA] ⍬ >>>> 'insert into bar (a,b) values (?,?)' SQL∆Exec[dbB] result >>>> SQL∆Close dbA >>>> SQL∆Close dbB >>>> >>>> >>>> Are you all OK with this syntax? >>>> >>>> Regards, >>>> Elias >>>> >>> >>> >> >