From Timothy.Keitt@StonyBrook.Edu Mon Apr 9 21:07:53 2001 Date: Mon, 19 Mar 2001 16:19:39 -0500 From: Timothy H. Keitt To: r-devel@hypatia.math.ethz.ch Subject: [Rd] generic database access methods I've been putting together a package that defined generic methods for database access. The packages is called "Rdbi." It borrows as much as possible from existing database packages / proposals. I'd like to start a discussion about the proposed interface. Here's what I've come up with so far: # # Rdbi: connectionMethods.R # dbConnect <- function(dbObj, ...) UseMethod("dbConnect") # # dbObj should be generated by an implementation defined function, # e.g., RPgSQL(), which returns a object with an approprite class # name, e.g., "PostgreSQL" or "MySQL". The implementation then # provides a method that actually opens the connection. # dbConnect.default <- function(dbObj, ...) stop("Invalid database class") # # User passed something other than a defined database class # dbDisconnect <- function(conn) UseMethod("dbDisconnect") # # Close connection and free resources # dbDisconnect.default <- function(conn) stop("Invalid connection object") dbReconnect <- function(conn) UseMethod("dbReconnect") # # The conn object should store the options passed to dbConnect so that # it can reestablish the connection. # dbReconnect.default <- function(conn) stop("Invalid connection object") # # User passed something other than a defined connection class # dbConnectionOK <- function(conn) UseMethod("dbConnectionOK") # # Returns TRUE if the connection object is valid and the connection # can be used to communicate with the database backend. # dbConnectionOK.default <- function(conn) FALSE # # User passed something other than a defined connection class # # # Rdbi: ioMethods.R # dbSendQuery <- function(conn, ...) UseMethod("dbSendQuery") # # This function submits a query string to the backend. If the query # generates any results, they should be returned in a data frame; # otherwise the function returns NULL. Printing error messgages is # left to the implementation, but this function should not issue a # call to error() or stop(). Error messages may be retrievable from # the connection object depending on implementation. # dbSendQuery.default <- function(conn, ...) stop("Invalid connection object") # # This means that the method was called on something other than a # connection object. # dbListTables <- function(conn, ...) UseMethod("dbListTables") # # Output a list of table names associated with the connection object. # Output should look like output from ls(). # dbListTables.default <- function(conn, ...) stop("Invalid connection object") dbReadTable <- function(conn, ...) UseMethod("dbReadTable") # # Analog of the read.table() function. Returns a data frame. Some # facility for converting DB types to R types is helpfull. Generally, # this will just pass a "select * from mytable" to dbSendQuery() which # returns the data frame. # dbReadTable.default <- function(conn, ...) stop("Invalid connection object") dbWriteTable <- function(conn, ...) UseMethod("dbWriteTable") # # Analog of write.table(). It should assemble input into a data frame # and write the frame into a table in database. # dbWriteTable.default <- function(conn, ...) stop("Invalid connection object") T. -- Timothy H. Keitt Department of Ecology and Evolution State University of New York at Stony Brook Phone: 631-632-1101, FAX: 631-632-7626 http://life.bio.sunysb.edu/ee/keitt/ -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._