Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

PostgreSQL 2 Rebol and back again...

 [1/20] from: emptyhead::home::nl at: 7-Dec-2000 11:21


PostgreSQL also has an tcp/ip interface, an it is free and has more options than mysql and is distrubuted with redhat. I saw some database tests where PostgreSQL outperforms most databases. I managed to login into the database using rebol connecting to the tcp/ip port. The only problem is that when sending an query the protocol doesn't seem to match the implementation. The documentation of the protocol is on their website: http://www.postgresql.org/ Could someone find out what goes wrong. I can not find the problem. Daan Oosterveld CRS - Psy Sel/SPO, COUSSEMENT Christophe, CPN schreef:
> Jeff: > Just ask Bo at RT for a trial version: [bo--rebol--com]
<<quoted lines omitted: 4>>
> good luck > Christophe
-- Attached file included as plaintext by Listar -- -- File: postgres.r REBOL [ Title: "PostgreSQL frontend client" Author: "Daan Oosterveld" Date: now Version: 0.0.1 Notes: { This client can be used on the localhost... It does not supply any password authorisation of any kind at this moment... Standart host is localhost:5432 other connections can be set by using /host } Usage: { Quick information: >> postgres/help database: postgres/startup user (string!) database (string!) [/host tcp://host.domain:port (url) ] result: postgres/query database {query} postgres/terminate database } ] postgres: make object! [ ; all postgres user functions: startup: func [ {Make a connection to a postgreSQL database} user [string!] {User indentification} database [string!] {Database to connect} /host {Use a custom host} address [url!] {postgreSQL TCP/IP server to connect} /throw {Throw "postgres" instead of creating errors} name {name to throw, none is no name...} /debug {Print logs direct on screen} /local database ][ either debug [ database: make-database/debug database user ][ database: make-database database user ] database/throw: throw open-database-connection database tcp://localhost:5432 send-packet/StartupPacket database database/name database/user "" "" ; Handles startup cycle recieve-packet/startup-cycle database ; If no errors where triggered we should be logged in ; and be able to run a query! database ] query: func [ {Queries a connected database} database [object!] {database to query (returned by startup)} query [string!] {SQL query} /throw {Throws "postgres" instead of creating errors} name {A named throw, none to disable} ][ database/throw: throw send-packet/Query database query return recieve-packet/Query-cycle database ] terminate: func [ {Terminates a database connection} database [object!] {Database to terminate} ][ send-packet/terminate database close database/host add-log database 'connection {Frontend: Closed connection} ] log: func [ {Returns notice and error log, great for debuging} database [object!] {Database to get log from} ][ foreach [type entry] database/log [ print entry ] ] ;------------------------------------------------ ; Do not use any functions below this comment... ;------------------------------------------------ ; Notivy me (by email) when... ; - You found a bug ; - You have a suggestion ; - You changed the code to suit your implementation ; (you shouldn't do this, but if you do: add an author, ; and also change the version and date.) ; - You bugfixed untested parts add-log: func [database type log-entry][ append database/log reduce [type log-entry] if database/trace [print log-entry] ] issue-error-log: func [database error][ add-log database 'error error either database/throw [ throw/name error "postgres" ][ make error! error ] ] ; function to make a database object... make-database: func [ the-name [string!] the-user [string!] /debug ][ make object! [ host: none ; port to use log: make block! 10 ; connection log name: the-name ; database name user: the-user ; user login name pid: none key: none trace: debug throw: false ] ] open-database-connection: func [database host][ database/host: open/binary host add-log database 'connection "Frontend: Opened connection" ] ; functions to recieve packets... recieve-packet: make object! [ ; packetlist: Startup Query Status ; AsciiRow x T ; AuthenticationOk x C ; AuthenticationKerberosV4 x X ; AuthenticationKerberosV5 x X ; AuthenticationUnencryptedPassword x T ; AuthenticationEncryptedPassword x X ; BackendKeyData x C ; BinaryRow x T ; CompletedResponse x T ; CopyDataRows x T ; CopyInResponse x T ; CopyOutResponse x T ; CursorResponse x T ; EmptyQueryResponse x T ; ErrorResponse x x U ; FunctionResultResponse N ; FunctionVoidResponse N ; NoticeResponse x x U ; NotificationResponse x T ; ReadyForQuery x x C ; RowDiscription x T ; ; Status: ; (T)odo, should be implemented in the near future ; (C)ompleted, ; (U)ntested, might be bugs in it, never used before ; (B)uggy, ; (N)ot implemented ; (X) terminates connection after unsupported packet... ; Note: The function cycle is not implemented in this release ; function to recieve data after sending a query query-cycle: func [database /local result][ result: make block! 10 until [ ;print "LOOP!" switch/default recieve-value/byte database 1 [ "G" [ CopyInResponse database false ] "H" [ insert/only tail result CopyOutResponse database false ] "P" [ CursorResponse database ] "N" [ NoticeResponse database ] "I" [ EmptyQueryResponse database ] ; Completed SQL statement: "C" [ CompleteResponse database false ] ; Exit packets "E" [ ErrorResponse database ] "Z" [ ReadyForQuery database ] ][ add-log database 'unknown {Frontend: Warning: recieved unknown packet} false ] ] result ] ; function to recieve packets from the startup cycle startup-cycle: func [database][ ; First we have to wait for a AuthorisationOk or other less pleasant ; response... until [ switch/default recieve-value/byte database 1 [ "N" [ NoticeResponse database ] "E" [ ErrorResponse ] "R" [ switch/default to-integer recieve-value/int/b32 database [ 0 [ add-log database 'startup {Backend: AuthenticationOK} return true ] 1 [ KerberosV4 database ] 2 [ KerberosV5 database ] 3 [ UnencryptedPassword database ] 4 [ EncryptedPassword database ] ][ add-log database 'unknown {Frontend: Warning: Recieved unknown packet} false ] ] ][ add-log database 'unknown {Frontend: Warning: Recieved unknown packet} false ] ] ; The until is not needed, because no authentication ; loops more times, just implemented it already for future ; implementation ; AuthenticationOk recieved!, entering the backend startup loop until [ switch/default recieve-value/byte database 1 [ "K" [ BackendKeyData database ] "Z" [ ReadyForQuery database ] "N" [ NoticeResponse database ] "E" [ ; ErrorResponse issue-error-log database rejoin [ "Backend: Error: " recieve-value/string database ] ] ][ issue-error-log database {Frontend: Error: Recieved unsupported packet} ] ] ; The database is now ready for SQL queries... return database ] ; The packet-handlers follow: ; ErrorResponse ErrorResponse: func [database][ issue-error-log database recieve-value/string database ] ; Unsupported password authentications KerberosV4: KerberosV5: UnencryptedPassword: EncryptedPassword: func [database][ send-packet/Terminate database issue-error-log database {Frontend: Error: Unsupported authentication protocol} ] ; Notice packet... just a message for the log NoticeResponse: func [database][ add-log database 'notice rejoin [ "Backend: Notice: " recieve-value/string database ] false ] ; Copy from frontend to backend... Not supported... CopyInResponse: func [database][ issue-error-log database {Frontend: Error: CopyInResponse not supported.} ] CopyOutResponse: func [database][ add-log database 'query {Backend: CopyOutResponse, sending datarows...} CopyDataRows database ] ; Copies a stream of datarows... CopyDataRows: func [database /local result temp][ add-log database 'query {Backend: Sending datarows} result: make string! 100 append result recieve-value/byte database 4 until [ append result recieve/byte database 1 (found? find/match skip tail result -4 "^/\.^/") ] result ] ; SQL result is commin' in... CursorResponse: func [database][ add-log database 'query rejoin [ {Backend: Cursor: [ } mold recieve-value/string database { ]} ] false ] ; Completed SQL statement: CompleteResponse: func [database][ add-log database 'query rejoin [ {Backend: Completed query: [ } mold recieve-value/string database { ] } ] false ] ; EmptyQueryResponse...(who would send one?) EmptyQueryResponse: func [database][ recieve-value/string database add-log database 'query {Backend: Empty query!} false ] ; Indicates that a new query starts or the startup stops ReadyForQuery: func [database][ add-log database 'ready {Backend: Ready for query} ; this packet has no more data then the header... true ; stop looping ] ; Magic key data to cancel a request... BackendKeyData: func [database][ ; The backend has suceeded to startup... database/pid: recieve-value/int/b32 database database/key: recieve-value/int/b32 database add-log database 'startup rejoin [ {Backend: Backend key data: [ pid: } database/pid { key: } database/key { ] } ] false ; still have to wait for ReadyForQuery... ] ; recives values from the database recieve-value: make object! [ ; Get a byte value... byte: func [database length][ to-string copy/part database/host length ] string: func [database /local string temp][ string: make string! 32 while[ (temp: copy/part database/host 1) <> #{00} ][ append string temp ] probe string ] lim-string: func [database length][ trim/with to-string copy/part database/host length "^@" ] int: make object! [ b16: func [database][ copy/part database/host 2 ] b32: func [database][ copy/part database/host 4 ] ] ] ] ; functions to send frontend packets.. send-packet: make object! [ ; Packet list: Startup Query Status ; CancelRequest x N ; CopyDataRows x T ; EncryptedPasswordPacket x N ; FunctionCall x N ; Query x T ; StartupPacket x C ; Terminate x C ; UnencryptedPasswordPacket x T ; ; Status: ; (T)odo, should be implemented in the near future ; (C)ompleted, ; (U)ntested, might be bugs in it, never used before ; (B)uggy, ; (N)ot implemented ; (X) terminates connection after unsupported packet... ; Note: The function cycle is not implemented in this release ; The query packet... ; The queries should end with an ; ! Query: func [ database q ][ ;send-value/byte database "Q" send-value/string database q add-log database 'query "Frontend: Query: Sended SQL query" ] ; The startup packet is one of the most important ; packets, it initialises a database connection and ; it is the first packet to be sended over a new connection StartupPacket: func [ database database-name user-name backend-commandline tty-debug-messages ][ ; length of packet (296) send-value/int/b32 database #{000000C4} ; version 2.0 int16(2).int16(0) send-value/int/b32 database #{00020000} ; Send database name send-value/lim-string database database-name 64 ; Send user name send-value/lim-string database user-name 32 ; Send backend command arguments send-value/lim-string database backend-commandline 64 ; Unused send-value/lim-string database "" 64 ; tty backend debug messages send-value/lim-string database tty-debug-messages 64 add-log database 'packet rejoin [ {Frontend: Startup packet: [} { protocol: 2.0} { database: } mold database-name { user: } mold user-name { ] } ] ] ; Terminate connection with backend after ReayForQuery Terminate: func [database][ add-log database 'terminate "Frontend: Terminate" send-value/byte database "X" ] ; Used to send elements of a message ; These functions should only be used by packet senders... send-value: make object! [ ; Value list: ; Intn(i) n integer i (32/64) ; String(v) send a normal C-string (NullTerminated) ; LimStringn(v) string limited to a size n (NullTerm) ; Byten(v) send n bytes (characters) ; int: func [database /b16 /b32 value ][ either b16 [ insert/part database/host value 2 ][ ; standart is int32(v) insert/part database/host value 4 ] ] string: func [ database value ][ ;print query database/host insert probe database/host probe join to-binary value #{00} ;insert database/host #{00} ] lim-string: func [ database value bytes ][ insert database/host to-binary value insert/dup database/host #{00} (bytes - length? value) ] byte: func [ database value ][ insert database/host to-binary value ] ] ] ] trace/net on db: postgres/startup/debug "daan" "compactdiskshop" postgres/query db "QCREATE TABLE compactdisks (NAME CHARACTER(40));^/" postgres/terminate db postgres/log db

 [2/20] from: nhytro:compuserve at: 7-Dec-2000 6:05


Hi Daan! I agree that Postgres is better, I would actually like to use Postgres, But I can´t compile on Windows ( I can´t speak C++). Were you able to compile MDBMS on Widows?. Regards Sharriff Nachricht geschrieben von INTERNET:[rebol-list--rebol--com]
>PostgreSQL also has an tcp/ip interface, an it is free and has more
options than mysql and is distrubuted with redhat. I saw some database tests where PostgreSQL outperforms most databases. I managed to login into the database using rebol connecting to the tcp/ip port. The only problem is that when sending an query the protocol doesn't seem to match the implementation. The documentation of the protocol is on their website: http://www.postgresql.org/ Could someone find out what goes wrong. I can not find the problem.< Hi Daan

 [3/20] from: cribbsj:oakwood at: 7-Dec-2000 8:23


Hi, Sharriff! Not to break in on your question to Daan, but is someone attempting to get MDBMS to run on Windows? That would be cool! About a month ago, I spent a whole day using Google to try to find a DBMS that would let me connect to it via a port from Rebol. MDBMS was the only one I found. Unfortunately, when I emailed the author of MDBMS, it sounded like he was no longer actively developing the product. Also, it didn't run on Windows, just Linux. By the way, if someone could kindly point me towards a more specific link to find that Postres port connection documentation, I would appreciate it. Last time I checked the site I couldn't find anything in the docs talking about that. Jamey. On Thursday 07 December 2000 06:05, you wrote:

 [4/20] from: nhytro:compuserve at: 7-Dec-2000 10:07


Hi Jamie! I rang Hinttech in Holland up too, and the authour had absolutely no intention of porting it to windows, but he gave me the hint that it was written in GNU C and straight C, so it should´nt be hard to comple on a windows machine, I got a C tutorial and freeware compiler now ( thanks to Mark) and I hope I´ll be good enough soon to be able to compile it on windows. Regards Sharriff

 [5/20] from: cribbsj:oakwood at: 7-Dec-2000 10:23


Go for it, Sharriff! That would be great! Did the author (I think his first name was Marty) sound like he had any intention of continuing development of MDBMS? I haven't played with it much, but it seems like such a cool little product and it's so easy to install that it seems a shame to see it stay dormant. Jamey. On Thursday 07 December 2000 10:07, you wrote:

 [6/20] from: jeff:rebol at: 7-Dec-2000 7:59


I've also made a script for COMMAND talks directly to Postgres through the postgres-client shared library functions, if anyone's interested. The script's pretty clean and comprehensive. -jeff

 [7/20] from: jregent:centrum:cz at: 7-Dec-2000 17:41


Jeff, send this script to forum. Thanks. Jan Regent ______________________________________________________________
> Od: [jeff--rebol--net] > Komu: [rebol-list--rebol--com]
<<quoted lines omitted: 10>>
> [rebol-request--rebol--com] with "unsubscribe" in the > subject, without the quotes.
K chatování je tu http://www.XChat.cz Založte si svųj mail na http://mail.centrum.cz

 [8/20] from: jeff:rebol at: 7-Dec-2000 8:58


;- Postgres has a much cleaner client API to work with ; for REBOL/Command than MySQL. REBOL [ Title: "Postgres Database REBOL/command API" Purpose: { Exposes the Postgres API in REBOL/command } Needs: [command] File: %postgres.r ] pq: load/library %libpq.so routines: [ PQsetdbLogin [ "Login to postgres Database" pghost [int] pgport [int] pgoptions [int] pgtty [int] dbName [int] login [string!] pwd [string!] return: [long] ] PQdb ["Name of database" PGconn [int] return: [string!]] PQhost ["Name of host" PGconn [int] return: [string!]] PQoptions ["Options of connection" PGconn [int] return: [string!]] PQport ["Port number" PGconn [int] return: [string!]] PQtty ["Tty of database" PGconn [int] return: [string!]] PQstatus ["Status of connection" PGconn [int] return: [int]] PQerrorMessage ["Error associated with connection" PGconn [int] return: [string!]] PQfinish ["Close connection" PGconn [int]] PQreset ["Reset communication with database" PGconn [int]] PQexec [ "Execute SQL statement" PGconn [int] query [string!] return: [int]] PQresultStatus ["Status of query" result [int] return: [int]] PQresStatus ["Convert status to string" res-stat [int] return: [string!]] PQresultErrorMessage ["Error message for query" PGresult [int] return: [string!]] PQntuples ["Number of tuples in result" PGresult [int] return: [int]] PQnfields ["Number of fields in result" PGresult [int] return: [int]] PQfname ["Field attribute associated with field index" PGresult [int] field_index [int] return: [string!]] PQfnumber ["Field index associated with field name" PGresult [int] field_name [string!] return: [int]] PQftype ["Field type associated with given index" PGresult [int] field_num [int] return: [int]] PQfsize ["Size in bytes of field associated with index" PGresult [int] field_index [int] return: [int]] PQfmod ["Type-specific modification data per field at index" PGresult [int] field_index [int] return: [int]] PQgetvalue ["Get field (attribute) value" PGresult [int] tup_num [int] field_num [int] return: [char*]] PQgetlength ["Length of a field in bytes" PGresult [int] tup_num [int] field_num [int] return: [int]] PQgetisnull ["NULL status of a field" PGresult [int] tup_num [int] field_num [int] return: [int]] PQcmdStatus ["Command status of last query command" PGresult [int] return: [string!]] PQcmdTuples ["Number of tuples affected by INSERT, UPDATE, DELETE queries" PGresult [int] return: [string!]] PQoidStatus ["String with the object id of the tuple inserted" PGresult [int] return: [string!]] PQclear ["Frees the storage associated with the PGresult" PQresult [int]] PQsendQuery ["Submit a query to Postgres without waiting result(s)" PGconn [int] query [string!] return: [string!]] PQgetResult ["Wait for the next result from a prior PQsendQuery" PGconn [int] return: [int]] PQconsumeInput ["If input is available from the backend, consume it" PGconn [int]] PQisBusy ["Returns TRUE if a query is busy (would block)" PGconn [int] return: [int]] PQsocket ["file descriptor number for the backend connection socket" PGconn [int] return: [int]] PQrequestCancel["Request abandon processing of the current query" PGconn [int] return: [int]] fe_getauthname ["Name the user has authenticated" errorMessage [string!] return: [string!]] fe_setauthsvc ["use authentication service name rather default" name [string!] errorMessage [string!]] ] foreach [name spec] routines [ set name make routine! spec pq form name ]

 [9/20] from: emptyhead:home:nl at: 7-Dec-2000 18:04


I have not tried yet. You don't have to speak C++ for this. Some essential files are missing from the include/sys directory. Like socket.h. I only have compiled C/C++ under Linux and BeOS. These have standart unix headers to support tcp/ip. There should be some around for windows. Does anyone know where to find standart unix headers for windows? Daan Oosterveld Sharriff Aina schreef:

 [10/20] from: emptyhead:home:nl at: 7-Dec-2000 18:15


Jamey Cribbs schreef:
> Hi, Sharriff! > Not to break in on your question to Daan, but is someone attempting to get
<<quoted lines omitted: 3>>
> I emailed the author of MDBMS, it sounded like he was no longer actively > developing the product. Also, it didn't run on Windows, just Linux.
I use BeOS and Linux as base platform to run cgi scripts on. It is possible to make it run on windows. I never developed on/for windows and I like to keep it that way. 8^)
> By the way, if someone could kindly point me towards a more specific link to > find that Postres port connection documentation, I would appreciate it. Last > time I checked the site I couldn't find anything in the docs talking about > that. >
http://www.postgresql.org/devel-corner/docs/postgres/protocol.htm Daan Oosterveld

 [11/20] from: g:santilli:tiscalinet:it at: 8-Dec-2000 11:03


Hello Jamey! On 07-Dic-00, you wrote: [...] Just a question for you all: would you be interested in a DBMS written in REBOL? What kind of functionality do you consider most important? I have some ideas floating in my mind, but I think I won't have enough time to implement them all. But perhaps, with some help... Regards, Gabriele. -- Gabriele Santilli <[giesse--writeme--com]> - Amigan - REBOL programmer Amiga Group Italia sez. L'Aquila -- http://www.amyresource.it/AGI/

 [12/20] from: cribbsj:oakwood at: 8-Dec-2000 3:25


Hello, Gabriele! That's a great question! It's funny you mention it. A few weeks ago, after the light bulb came on in my head when I discovered how EASY it is to connect to separate REBOL processes through a port, I started fooling around writing a VERY basic DBMS engine in REBOL that could be accessed through a port, similar to the way MDBMS can. I spent about a week on it, off and on, before I got swamped with other stuff. I was able to get the engine to be able to: *Initialize an object (representing a table) for each .db file it found in a directory. * Accept client requests for add, change, delete, and find and return the result set in the form of a block. The client request had to be in the form of a block (ex): [Add player "Montana" "Joe" "QB" "SF"] That was about as far as I got, but, man, I had a lot of fun working on it and it was SO cool to think I was actually writing a DB engine (albeit a very crude, simplistic one). Anyway, I'll quit rambling and get back to your question. What would I like to see in a DBMS? Well, just off the top of my head: *Normal stuff like adds, deletes, changes, selects (queries). *Joins. *Multi-user (locking, etc.) *Referential Integrity. *Ability to connect to remote dbs via TCP/IP. What is not so important to me: * Transactions * Triggers or stored procedures (although they would be nice :) ) Well, I haven't had my morning coffee yet, so that's all I can think of right now. If you pull something like this off, I think it would be HUGE for the Rebol community. Jamey. On Friday 08 December 2000 04:03, you wrote:

 [13/20] from: chaz:innocent at: 8-Dec-2000 23:48


I'd like to be able to use a database to store and retrieve REBOL objects, e.g. REBOL/View gadgets (sliders, buttons, etc), schemes, and contexts. It would be nice if this database connected to, and exposed, the REBOL System Object. chaz At 11:03 AM 12/8/00 +0200, you wrote:

 [14/20] from: g:santilli:tiscalinet:it at: 8-Dec-2000 18:53


Hello Jamey! On 08-Dic-00, you wrote: JC> I spent about a week on it, off and on, before I got swamped JC> with other stuff. I was able to get the engine to be able to: [...] If you don't mind, I'd like to have a look at it. It could be an interesting source of ideas. :-) JC> What is not so important to me: JC> * Transactions JC> * Triggers or stored procedures (although they would be nice JC> :) ) I think that the ability to store code as data would make triggers and stored procedures very easy to add; REBOL could even make possible to do new and interesting things... JC> can think of right now. If you pull something like this off, JC> I think it would be HUGE for the Rebol community. I mainly wonder about speed, because using an interpreted language will always give some penalty wrt native DBMS. Would the greater simplicity of the REBOL approach justify such a penalty, in your opinion? Regards, Gabriele. -- Gabriele Santilli <[giesse--writeme--com]> - Amigan - REBOL programmer Amiga Group Italia sez. L'Aquila -- http://www.amyresource.it/AGI/

 [15/20] from: g:santilli:tiscalinet:it at: 9-Dec-2000 11:17


Hello chaz! On 09-Dic-00, you wrote: c> I'd like to be able to use a database to store and retrieve c> REBOL objects, e.g. REBOL/View gadgets (sliders, buttons, c> etc), schemes, and contexts. It would be nice if this database c> connected to, and exposed, the REBOL System Object. Serializing complex objects is not that simple. But you can easyly store dialects that construct your objects; so you could store your VID code, for example... Regards, Gabriele. -- Gabriele Santilli <[giesse--writeme--com]> - Amigan - REBOL programmer Amiga Group Italia sez. L'Aquila -- http://www.amyresource.it/AGI/

 [16/20] from: cribbsj:oakwood at: 11-Dec-2000 10:30


Gabriele, I sent you the files in email to your address. Please don't laugh at my code! :) In response to your question below, I would answer "Yes". You are right about the speed penalty. However, I think that the combination of Rebol/View with some kind of easily accessible, portable backend DBMS would be a VB killer. If the backend were to be written in Rebol, as you are proposing, this would ensure portability and also give the developer the ability to customize or modify any back-end processes he desired. It might not be applicable for huge databases or for transaction intensive ones, but those types of apps would probably use something like Oracle anyway. Jamey. On Friday 08 December 2000 11:53, you wrote:

 [17/20] from: coussement:c:itc:mil:be at: 13-Dec-2000 9:50


Hi Gabriele: An answer with some delay: I had to think a little bit about it. Well, I'd the same idea and began to work on it for my project. I've work for sometime now with relational systems (oa. SQL Server) and I'm convinced data management can better than being flat... In my particular system, I'm more interrested in the relations between the items than in the items themself - because the first carry the key informations I need. So ... what I need is an Object Oriented DBMS ! I've no experience with those system (well with OO), and I intend to learn it and write my own Rebol/OODBMS. After all, OO and Rebol are both another step in the quest for expressing solutions to problems in a more natural, easier to understand way. Of course, the more people interrested in it, the further we can reach ! I've done some prospection for documentation. For those interested, try this: * Chaudhri, A.B. (1993) Object Database Management Systems: An Overview in "BCS OOPS Newsletter", No.18 Summer '93 * Chaudhri, A.B. & Osmon, P. (1996) Databases for a New Generation in Object Expert March/April '97 pp 33-38 * Graham, I. (1994) Object Oriented Methods. Published by: Addison-Wesley, ISBN 0-201-59371-8 * Graham, I. (1995) Migrating to Object Technology. Published by: Addison-Wesley, ISBN 0-201-59389-0 * Vadarparty, K. (1996) Developing an ODBMS Application: Basic Steps in "Journal of Object Oriented Programming" January '96 pp 19-21 or on the net, the -very- well documented site of the DACS: http://www.dacs.dtic.mil/techs/oodbms2/index.html Regards to the REBOLlians, Christophe

 [18/20] from: webmaster:siliconspecies at: 13-Dec-2000 4:10


Cache is object oriented. www.edbms.com Jeff

 [19/20] from: g:santilli:tiscalinet:it at: 13-Dec-2000 16:41


CRS - Psy Sel/SPO, COUSSEMENT Christophe, CPN wrote:
> http://www.dacs.dtic.mil/techs/oodbms2/index.html
Thanks for the link, this is an interesting issue. I'm not able to check it out currently (the host seems to be unreachable from here --- probably a broken router), but I'll check it out surely. Regards, Gabriele. -- Gabriele Santilli <[giesse--writeme--com]> - Amigan - REBOL programmer Amiga Group Italia sez. L'Aquila -- http://www.amyresource.it/AGI/

 [20/20] from: brett:codeconscious at: 14-Dec-2000 13:45


A bit late to this discussion.
> I mainly wonder about speed, because using an interpreted language > will always give some penalty wrt native DBMS. Would the greater > simplicity of the REBOL approach justify such a penalty, in your > opinion? >
I think such an approach could carve out its own niche applications. Applications upgrading to or requiring blistering speed would need to consider alternatives as they do now (I mean that you always have to pick your solutions according to your requirements). A really really big plus for this project would be that it would stress test Rebol for reliability and stability. If you do it, I'd love it. Especially with the functionality already discussed. Brett.

Notes
  • Quoted lines have been omitted from some messages.
    View the message alone to see the lines that have been omitted