From 7fc212c9a6603b573fae2f99e28048119aefda22 Mon Sep 17 00:00:00 2001 From: Alexey Verkhovsky Date: Sun, 13 Nov 2005 05:24:17 +0000 Subject: [PATCH] Included sqlite3 DB and driver; No Step 3 installation for Win32 --- config/environment.rb | 2 +- instiki.cmd | 2 + instiki.rb | 1 - lib/native/win32/sqlite3.dll | Bin 0 -> 250368 bytes lib/native/win32/sqlite3_api.so | Bin 0 -> 90112 bytes vendor/sqlite3-ruby/sqlite3.rb | 33 + vendor/sqlite3-ruby/sqlite3/constants.rb | 81 ++ vendor/sqlite3-ruby/sqlite3/database.rb | 744 ++++++++++++++++++ vendor/sqlite3-ruby/sqlite3/driver/dl/api.rb | 184 +++++ .../sqlite3-ruby/sqlite3/driver/dl/driver.rb | 334 ++++++++ .../sqlite3/driver/native/driver.rb | 218 +++++ vendor/sqlite3-ruby/sqlite3/errors.rb | 100 +++ vendor/sqlite3-ruby/sqlite3/pragmas.rb | 254 ++++++ vendor/sqlite3-ruby/sqlite3/resultset.rb | 189 +++++ vendor/sqlite3-ruby/sqlite3/statement.rb | 240 ++++++ vendor/sqlite3-ruby/sqlite3/translator.rb | 135 ++++ vendor/sqlite3-ruby/sqlite3/value.rb | 89 +++ vendor/sqlite3-ruby/sqlite3/version.rb | 45 ++ 18 files changed, 2649 insertions(+), 2 deletions(-) create mode 100644 instiki.cmd create mode 100644 lib/native/win32/sqlite3.dll create mode 100644 lib/native/win32/sqlite3_api.so create mode 100644 vendor/sqlite3-ruby/sqlite3.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/constants.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/database.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/driver/dl/api.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/driver/dl/driver.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/driver/native/driver.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/errors.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/pragmas.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/resultset.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/statement.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/translator.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/value.rb create mode 100644 vendor/sqlite3-ruby/sqlite3/version.rb diff --git a/config/environment.rb b/config/environment.rb index cb7c9b42..f68df2f1 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -20,7 +20,7 @@ Rails::Initializer.run do |config| # (enables use of different database adapters for development and test environments) config.active_record.schema_format = :ruby - # See Rails::Configuration for more options + config.load_paths << "#{RAILS_ROOT}/vendor/sqlite3-ruby" end # Instiki-specific configuration below diff --git a/instiki.cmd b/instiki.cmd new file mode 100644 index 00000000..00461495 --- /dev/null +++ b/instiki.cmd @@ -0,0 +1,2 @@ +set PATH=.\lib\native\win32;%PATH% +ruby.exe script\server -e production \ No newline at end of file diff --git a/instiki.rb b/instiki.rb index f26498e4..93f6ea51 100755 --- a/instiki.rb +++ b/instiki.rb @@ -1,3 +1,2 @@ #!/usr/bin/env ruby - load File.dirname(__FILE__) + '/script/server' diff --git a/lib/native/win32/sqlite3.dll b/lib/native/win32/sqlite3.dll new file mode 100644 index 0000000000000000000000000000000000000000..98c50c4d23a0d29b3de032a923ff4e49229d4fa0 GIT binary patch literal 250368 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 z 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 z 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

dG0ue&ZS4;Bm-{wC>iK--R=A)YR0x7GiUvfe?Z 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 literal 0 HcmV?d00001 diff --git a/vendor/sqlite3-ruby/sqlite3.rb b/vendor/sqlite3-ruby/sqlite3.rb new file mode 100644 index 00000000..ff8af026 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3.rb @@ -0,0 +1,33 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'sqlite3/database' diff --git a/vendor/sqlite3-ruby/sqlite3/constants.rb b/vendor/sqlite3-ruby/sqlite3/constants.rb new file mode 100644 index 00000000..5a20e461 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/constants.rb @@ -0,0 +1,81 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +module SQLite3 ; module Constants + + module TextRep + UTF8 = 1 + UTF16LE = 2 + UTF16BE = 3 + UTF16 = 4 + ANY = 5 + end + + module ColumnType + INTEGER = 1 + FLOAT = 2 + TEXT = 3 + BLOB = 4 + NULL = 5 + end + + module ErrorCode + OK = 0 # Successful result + ERROR = 1 # SQL error or missing database + INTERNAL = 2 # An internal logic error in SQLite + PERM = 3 # Access permission denied + ABORT = 4 # Callback routine requested an abort + BUSY = 5 # The database file is locked + LOCKED = 6 # A table in the database is locked + NOMEM = 7 # A malloc() failed + READONLY = 8 # Attempt to write a readonly database + INTERRUPT = 9 # Operation terminated by sqlite_interrupt() + IOERR = 10 # Some kind of disk I/O error occurred + CORRUPT = 11 # The database disk image is malformed + NOTFOUND = 12 # (Internal Only) Table or record not found + FULL = 13 # Insertion failed because database is full + CANTOPEN = 14 # Unable to open the database file + PROTOCOL = 15 # Database lock protocol error + EMPTY = 16 # (Internal Only) Database table is empty + SCHEMA = 17 # The database schema changed + TOOBIG = 18 # Too much data for one row of a table + CONSTRAINT = 19 # Abort due to contraint violation + MISMATCH = 20 # Data type mismatch + MISUSE = 21 # Library used incorrectly + NOLFS = 22 # Uses OS features not supported on host + AUTH = 23 # Authorization denied + + ROW = 100 # sqlite_step() has another row ready + DONE = 101 # sqlite_step() has finished executing + end + +end ; end diff --git a/vendor/sqlite3-ruby/sqlite3/database.rb b/vendor/sqlite3-ruby/sqlite3/database.rb new file mode 100644 index 00000000..f1260045 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/database.rb @@ -0,0 +1,744 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'base64' +require 'sqlite3/constants' +require 'sqlite3/errors' +require 'sqlite3/pragmas' +require 'sqlite3/statement' +require 'sqlite3/translator' +require 'sqlite3/value' + +module SQLite3 + + # The Database class encapsulates a single connection to a SQLite3 database. + # Its usage is very straightforward: + # + # require 'sqlite3' + # + # db = SQLite3::Database.new( "data.db" ) + # + # db.execute( "select * from table" ) do |row| + # p row + # end + # + # db.close + # + # It wraps the lower-level methods provides by the selected driver, and + # includes the Pragmas module for access to various pragma convenience + # methods. + # + # The Database class provides type translation services as well, by which + # the SQLite3 data types (which are all represented as strings) may be + # converted into their corresponding types (as defined in the schemas + # for their tables). This translation only occurs when querying data from + # the database--insertions and updates are all still typeless. + # + # Furthermore, the Database class has been designed to work well with the + # ArrayFields module from Ara Howard. If you require the ArrayFields + # module before performing a query, and if you have not enabled results as + # hashes, then the results will all be indexible by field name. + class Database + include Pragmas + + class < e + @driver.result_error( func, + "#{e.message} (#{e.class})", -1 ) + end + end + + result = @driver.create_function( @handle, name, arity, text_rep, nil, + callback, nil, nil ) + Error.check( result, self ) + + self + end + + # Creates a new aggregate function for use in SQL statements. Aggregate + # functions are functions that apply over every row in the result set, + # instead of over just a single row. (A very common aggregate function + # is the "count" function, for determining the number of rows that match + # a query.) + # + # The new function will be added as +name+, with the given +arity+. (For + # variable arity functions, use -1 for the arity.) + # + # The +step+ parameter must be a proc object that accepts as its first + # parameter a FunctionProxy instance (representing the function + # invocation), with any subsequent parameters (up to the function's arity). + # The +step+ callback will be invoked once for each row of the result set. + # + # The +finalize+ parameter must be a +proc+ object that accepts only a + # single parameter, the FunctionProxy instance representing the current + # function invocation. It should invoke FunctionProxy#set_result to + # store the result of the function. + # + # Example: + # + # db.create_aggregate( "lengths", 1 ) do + # step do |func, value| + # func[ :total ] ||= 0 + # func[ :total ] += ( value ? value.length : 0 ) + # end + # + # finalize do |func| + # func.set_result( func[ :total ] || 0 ) + # end + # end + # + # puts db.get_first_value( "select lengths(name) from table" ) + # + # See also #create_aggregate_handler for a more object-oriented approach to + # aggregate functions. + def create_aggregate( name, arity, step=nil, finalize=nil, + text_rep=Constants::TextRep::ANY, &block ) + # begin + if block + proxy = AggregateDefinitionProxy.new + proxy.instance_eval &block + step ||= proxy.step_callback + finalize ||= proxy.finalize_callback + end + + step_callback = proc do |func,*args| + ctx = @driver.aggregate_context( func ) + unless ctx[:__error] + begin + step.call( FunctionProxy.new( @driver, func, ctx ), + *args.map{|v| Value.new(self,v)} ) + rescue Exception => e + ctx[:__error] = e + end + end + end + + finalize_callback = proc do |func| + ctx = @driver.aggregate_context( func ) + unless ctx[:__error] + begin + finalize.call( FunctionProxy.new( @driver, func, ctx ) ) + rescue Exception => e + @driver.result_error( func, + "#{e.message} (#{e.class})", -1 ) + end + else + e = ctx[:__error] + @driver.result_error( func, + "#{e.message} (#{e.class})", -1 ) + end + end + + result = @driver.create_function( @handle, name, arity, text_rep, nil, + nil, step_callback, finalize_callback ) + Error.check( result, self ) + + self + end + + # This is another approach to creating an aggregate function (see + # #create_aggregate). Instead of explicitly specifying the name, + # callbacks, arity, and type, you specify a factory object + # (the "handler") that knows how to obtain all of that information. The + # handler should respond to the following messages: + # + # +arity+:: corresponds to the +arity+ parameter of #create_aggregate. This + # message is optional, and if the handler does not respond to it, + # the function will have an arity of -1. + # +name+:: this is the name of the function. The handler _must_ implement + # this message. + # +new+:: this must be implemented by the handler. It should return a new + # instance of the object that will handle a specific invocation of + # the function. + # + # The handler instance (the object returned by the +new+ message, described + # above), must respond to the following messages: + # + # +step+:: this is the method that will be called for each step of the + # aggregate function's evaluation. It should implement the same + # signature as the +step+ callback for #create_aggregate. + # +finalize+:: this is the method that will be called to finalize the + # aggregate function's evaluation. It should implement the + # same signature as the +finalize+ callback for + # #create_aggregate. + # + # Example: + # + # class LengthsAggregateHandler + # def self.arity; 1; end + # + # def initialize + # @total = 0 + # end + # + # def step( ctx, name ) + # @total += ( name ? name.length : 0 ) + # end + # + # def finalize( ctx ) + # ctx.set_result( @total ) + # end + # end + # + # db.create_aggregate_handler( LengthsAggregateHandler ) + # puts db.get_first_value( "select lengths(name) from A" ) + def create_aggregate_handler( handler ) + arity = -1 + text_rep = Constants::TextRep::ANY + + arity = handler.arity if handler.respond_to?(:arity) + text_rep = handler.text_rep if handler.respond_to?(:text_rep) + name = handler.name + + step = proc do |func,*args| + ctx = @driver.aggregate_context( func ) + unless ctx[ :__error ] + ctx[ :handler ] ||= handler.new + begin + ctx[ :handler ].step( FunctionProxy.new( @driver, func, ctx ), + *args.map{|v| Value.new(self,v)} ) + rescue Exception, StandardError => e + ctx[ :__error ] = e + end + end + end + + finalize = proc do |func| + ctx = @driver.aggregate_context( func ) + unless ctx[ :__error ] + ctx[ :handler ] ||= handler.new + begin + ctx[ :handler ].finalize( FunctionProxy.new( @driver, func, ctx ) ) + rescue Exception => e + ctx[ :__error ] = e + end + end + + if ctx[ :__error ] + e = ctx[ :__error ] + @driver.sqlite3_result_error( func, "#{e.message} (#{e.class})", -1 ) + end + end + + result = @driver.create_function( @handle, name, arity, text_rep, nil, + nil, step, finalize ) + Error.check( result, self ) + + self + end + + # Begins a new transaction. Note that nested transactions are not allowed + # by SQLite, so attempting to nest a transaction will result in a runtime + # exception. + # + # The +mode+ parameter may be either :deferred (the default), + # :immediate, or :exclusive. + # + # If a block is given, the database instance is yielded to it, and the + # transaction is committed when the block terminates. If the block + # raises an exception, a rollback will be performed instead. Note that if + # a block is given, #commit and #rollback should never be called + # explicitly or you'll get an error when the block terminates. + # + # If a block is not given, it is the caller's responsibility to end the + # transaction explicitly, either by calling #commit, or by calling + # #rollback. + def transaction( mode = :deferred ) + execute "begin #{mode.to_s} transaction" + @transaction_active = true + + if block_given? + abort = false + begin + yield self + rescue Exception + abort = true + raise + ensure + abort and rollback or commit + end + end + + true + end + + # Commits the current transaction. If there is no current transaction, + # this will cause an error to be raised. This returns +true+, in order + # to allow it to be used in idioms like + # abort? and rollback or commit. + def commit + execute "commit transaction" + @transaction_active = false + true + end + + # Rolls the current transaction back. If there is no current transaction, + # this will cause an error to be raised. This returns +true+, in order + # to allow it to be used in idioms like + # abort? and rollback or commit. + def rollback + execute "rollback transaction" + @transaction_active = false + true + end + + # Returns +true+ if there is a transaction active, and +false+ otherwise. + def transaction_active? + @transaction_active + end + + # Loads the corresponding driver, or if it is nil, attempts to locate a + # suitable driver. + def load_driver( driver ) + case driver + when Class + # do nothing--use what was given + when Symbol, String + require "sqlite3/driver/#{driver.to_s.downcase}/driver" + driver = SQLite3::Driver.const_get( driver )::Driver + else + [ "Native", "DL" ].each do |d| + begin + require "sqlite3/driver/#{d.downcase}/driver" + driver = SQLite3::Driver.const_get( d )::Driver + break + rescue SyntaxError + raise + rescue ScriptError, Exception, NameError + end + end + raise "no driver for sqlite3 found" unless driver + end + + @driver = driver.new + end + private :load_driver + + # A helper class for dealing with custom functions (see #create_function, + # #create_aggregate, and #create_aggregate_handler). It encapsulates the + # opaque function object that represents the current invocation. It also + # provides more convenient access to the API functions that operate on + # the function object. + # + # This class will almost _always_ be instantiated indirectly, by working + # with the create methods mentioned above. + class FunctionProxy + + # Create a new FunctionProxy that encapsulates the given +func+ object. + # If context is non-nil, the functions context will be set to that. If + # it is non-nil, it must quack like a Hash. If it is nil, then none of + # the context functions will be available. + def initialize( driver, func, context=nil ) + @driver = driver + @func = func + @context = context + end + + # Calls #set_result to set the result of this function. + def result=( result ) + set_result( result ) + end + + # Set the result of the function to the given value. The function will + # then return this value. + def set_result( result, utf16=false ) + @driver.result_text( @func, result, utf16 ) + end + + # Set the result of the function to the given error message. + # The function will then return that error. + def set_error( error ) + @driver.result_error( @func, error.to_s, -1 ) + end + + # (Only available to aggregate functions.) Returns the number of rows + # that the aggregate has processed so far. This will include the current + # row, and so will always return at least 1. + def count + ensure_aggregate! + @driver.aggregate_count( @func ) + end + + # Returns the value with the given key from the context. This is only + # available to aggregate functions. + def []( key ) + ensure_aggregate! + @context[ key ] + end + + # Sets the value with the given key in the context. This is only + # available to aggregate functions. + def []=( key, value ) + ensure_aggregate! + @context[ key ] = value + end + + # A function for performing a sanity check, to ensure that the function + # being invoked is an aggregate function. This is implied by the + # existence of the context variable. + def ensure_aggregate! + unless @context + raise MisuseException, "function is not an aggregate" + end + end + private :ensure_aggregate! + + end + + # A proxy used for defining the callbacks to an aggregate function. + class AggregateDefinitionProxy # :nodoc: + attr_reader :step_callback, :finalize_callback + + def step( &block ) + @step_callback = block + end + + def finalize( &block ) + @finalize_callback = block + end + end + + end + +end + diff --git a/vendor/sqlite3-ruby/sqlite3/driver/dl/api.rb b/vendor/sqlite3-ruby/sqlite3/driver/dl/api.rb new file mode 100644 index 00000000..9cea866f --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/driver/dl/api.rb @@ -0,0 +1,184 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'dl/import' + +module SQLite3 ; module Driver; module DL; + + module API + extend ::DL::Importable + + library_name = case RUBY_PLATFORM.downcase + when /darwin/ + "libsqlite3.dylib" + when /linux/, /freebsd|netbsd|openbsd|dragonfly/, /solaris/ + "libsqlite3.so" + when /win32/ + "sqlite3.dll" + else + abort <<-EOF +== * UNSUPPORTED PLATFORM ====================================================== +The platform '#{RUBY_PLATFORM}' is unsupported. Please help the author by +editing the following file to allow your sqlite3 library to be found, and +submitting a patch to jamis_buck@byu.edu. Thanks! + +#{__FILE__} +=========================================================================== * == + EOF + end + + if defined? SQLITE3_LIB_PATH + library_name = File.join( SQLITE3_LIB_PATH, library_name ) + end + + dlload library_name + + typealias "db", "void*" + typealias "stmt", "void*" + typealias "value", "void*" + typealias "context", "void*" + + # until Ruby/DL supports 64-bit ints, we'll just treat them as 32-bit ints + typealias "int64", "unsigned long" + + extern "const char *sqlite3_libversion()" + + extern "int sqlite3_open(const char*,db*)" + extern "int sqlite3_open16(const void*,db*)" + extern "int sqlite3_close(db)" + extern "const char* sqlite3_errmsg(db)" + extern "void* sqlite3_errmsg16(db)" + extern "int sqlite3_errcode(db)" + + extern "int sqlite3_prepare(db,const char*,int,stmt*,const char**)" + extern "int sqlite3_prepare16(db,const void*,int,stmt*,const void**)" + extern "int sqlite3_finalize(stmt)" + extern "int sqlite3_reset(stmt)" + extern "int sqlite3_step(stmt)" + + extern "int64 sqlite3_last_insert_rowid(db)" + extern "int sqlite3_changes(db)" + extern "int sqlite3_total_changes(db)" + extern "void sqlite3_interrupt(db)" + extern "ibool sqlite3_complete(const char*)" + extern "ibool sqlite3_complete16(const void*)" + + extern "int sqlite3_busy_handler(db,void*,void*)" + extern "int sqlite3_busy_timeout(db,int)" + + extern "int sqlite3_set_authorizer(db,void*,void*)" + extern "void* sqlite3_trace(db,void*,void*)" + + extern "int sqlite3_bind_blob(stmt,int,const void*,int,void*)" + extern "int sqlite3_bind_double(stmt,int,double)" + extern "int sqlite3_bind_int(stmt,int,int)" + extern "int sqlite3_bind_int64(stmt,int,int64)" + extern "int sqlite3_bind_null(stmt,int)" + extern "int sqlite3_bind_text(stmt,int,const char*,int,void*)" + extern "int sqlite3_bind_text16(stmt,int,const void*,int,void*)" + #extern "int sqlite3_bind_value(stmt,int,value)" + + extern "int sqlite3_bind_parameter_count(stmt)" + extern "const char* sqlite3_bind_parameter_name(stmt,int)" + extern "int sqlite3_bind_parameter_index(stmt,const char*)" + + extern "int sqlite3_column_count(stmt)" + extern "int sqlite3_data_count(stmt)" + + extern "const void *sqlite3_column_blob(stmt,int)" + extern "int sqlite3_column_bytes(stmt,int)" + extern "int sqlite3_column_bytes16(stmt,int)" + extern "const char *sqlite3_column_decltype(stmt,int)" + extern "void *sqlite3_column_decltype16(stmt,int)" + extern "double sqlite3_column_double(stmt,int)" + extern "int sqlite3_column_int(stmt,int)" + extern "int64 sqlite3_column_int64(stmt,int)" + extern "const char *sqlite3_column_name(stmt,int)" + extern "const void *sqlite3_column_name16(stmt,int)" + extern "const char *sqlite3_column_text(stmt,int)" + extern "const void *sqlite3_column_text16(stmt,int)" + extern "int sqlite3_column_type(stmt,int)" + + extern "int sqlite3_create_function(db,const char*,int,int,void*,void*,void*,void*)" + extern "int sqlite3_create_function16(db,const void*,int,int,void*,void*,void*,void*)" + extern "int sqlite3_aggregate_count(context)" + + extern "const void *sqlite3_value_blob(value)" + extern "int sqlite3_value_bytes(value)" + extern "int sqlite3_value_bytes16(value)" + extern "double sqlite3_value_double(value)" + extern "int sqlite3_value_int(value)" + extern "int64 sqlite3_value_int64(value)" + extern "const char* sqlite3_value_text(value)" + extern "const void* sqlite3_value_text16(value)" + extern "const void* sqlite3_value_text16le(value)" + extern "const void* sqlite3_value_text16be(value)" + extern "int sqlite3_value_type(value)" + + extern "void *sqlite3_aggregate_context(context,int)" + extern "void *sqlite3_user_data(context)" + extern "void *sqlite3_get_auxdata(context,int)" + extern "void sqlite3_set_auxdata(context,int,void*,void*)" + + extern "void sqlite3_result_blob(context,const void*,int,void*)" + extern "void sqlite3_result_double(context,double)" + extern "void sqlite3_result_error(context,const char*,int)" + extern "void sqlite3_result_error16(context,const void*,int)" + extern "void sqlite3_result_int(context,int)" + extern "void sqlite3_result_int64(context,int64)" + extern "void sqlite3_result_null(context)" + extern "void sqlite3_result_text(context,const char*,int,void*)" + extern "void sqlite3_result_text16(context,const void*,int,void*)" + extern "void sqlite3_result_text16le(context,const void*,int,void*)" + extern "void sqlite3_result_text16be(context,const void*,int,void*)" + extern "void sqlite3_result_value(context,value)" + + extern "int sqlite3_create_collation(db,const char*,int,void*,void*)" + extern "int sqlite3_create_collation16(db,const char*,int,void*,void*)" + extern "int sqlite3_collation_needed(db,void*,void*)" + extern "int sqlite3_collation_needed16(db,void*,void*)" + + # ==== CRYPTO (NOT IN PUBLIC RELEASE) ==== + if defined?( CRYPTO_API ) && CRYPTO_API + extern "int sqlite3_key(db,void*,int)" + extern "int sqlite3_rekey(db,void*,int)" + end + + # ==== EXPERIMENTAL ==== + if defined?( EXPERIMENTAL_API ) && EXPERIMENTAL_API + extern "int sqlite3_progress_handler(db,int,void*,void*)" + extern "int sqlite3_commit_hook(db,void*,void*)" + end + + end + +end ; end ; end diff --git a/vendor/sqlite3-ruby/sqlite3/driver/dl/driver.rb b/vendor/sqlite3-ruby/sqlite3/driver/dl/driver.rb new file mode 100644 index 00000000..ab24a13a --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/driver/dl/driver.rb @@ -0,0 +1,334 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'sqlite3/driver/dl/api' + +module Kernel + # Allows arbitrary objects to be passed as a pointer to functions. + # (Probably not very GC safe, but by encapsulating it like this we + # can change the implementation later.) + def to_ptr + ptr = DL.malloc(DL.sizeof("L")) + ptr.set_object self + ptr + end +end + +class DL::PtrData + # The inverse of the Kernel#to_ptr operation. + def to_object + n = to_s(4).unpack("L").first + return nil if n < 1 + ObjectSpace._id2ref(n) rescue self.to_s + end + + def set_object(obj) + self[0] = [obj.object_id].pack("L") + end +end + +module SQLite3 ; module Driver ; module DL + + class Driver + STATIC = ::DL::PtrData.new(0) + TRANSIENT = ::DL::PtrData.new(-1) + + def open( filename, utf16=false ) + handle = ::DL::PtrData.new(0) + result = API.send( ( utf16 ? :sqlite3_open16 : :sqlite3_open ), + filename+"\0", handle.ref ) + [ result, handle ] + end + + def errmsg( db, utf16=false ) + if utf16 + msg = API.sqlite3_errmsg16( db ) + msg.free = nil + msg.to_s(utf16_length(msg)) + else + API.sqlite3_errmsg( db ) + end + end + + def prepare( db, sql, utf16=false ) + handle = ::DL::PtrData.new(0) + remainder = ::DL::PtrData.new(0) + + result = API.send( ( utf16 ? :sqlite3_prepare16 : :sqlite3_prepare ), + db, sql+"\0", sql.length, handle.ref, remainder.ref ) + + args = utf16 ? [ utf16_length(remainder) ] : [] + remainder = remainder.to_s( *args ) + + [ result, handle, remainder ] + end + + def complete?( sql, utf16=false ) + API.send( utf16 ? :sqlite3_complete16 : :sqlite3_complete, sql+"\0" ) + end + + def value_blob( value ) + blob = API.sqlite3_value_blob( value ) + blob.free = nil + blob.to_s( API.sqlite3_value_bytes( value ) ) + end + + def value_text( value, utf16=false ) + method = case utf16 + when nil, false then :sqlite3_value_text + when :le then :sqlite3_value_text16le + when :be then :sqlite3_value_text16be + else :sqlite3_value_text16 + end + + result = API.send( method, value ) + if utf16 + result.free = nil + size = API.sqlite3_value_bytes( value ) + result = result.to_s( size ) + end + + result + end + + def column_blob( stmt, column ) + blob = API.sqlite3_column_blob( stmt, column ) + blob.free = nil + blob.to_s( API.sqlite3_column_bytes( stmt, column ) ) + end + + def result_text( func, text, utf16=false ) + method = case utf16 + when false, nil then :sqlite3_result_text + when :le then :sqlite3_result_text16le + when :be then :sqlite3_result_text16be + else :sqlite3_result_text16 + end + + s = text.to_s + API.send( method, func, s, s.length, TRANSIENT ) + end + + def busy_handler( db, data=nil, &block ) + @busy_handler = block + + unless @busy_handler_callback + @busy_handler_callback = ::DL.callback( "IPI" ) do |cookie, timeout| + @busy_handler.call( cookie, timeout ) || 0 + end + end + + API.sqlite3_busy_handler( db, block&&@busy_handler_callback, data ) + end + + def set_authorizer( db, data=nil, &block ) + @authorizer_handler = block + + unless @authorizer_handler_callback + @authorizer_handler_callback = ::DL.callback( "IPIPPPP" + ) do |cookie,mode,a,b,c,d| + @authorizer_handler.call( cookie, mode, + a&&a.to_s, b&&b.to_s, c&&c.to_s, d&&d.to_s ) || 0 + end + end + + API.sqlite3_set_authorizer( db, block&&@authorizer_handler_callback, + data ) + end + + def trace( db, data=nil, &block ) + @trace_handler = block + + unless @trace_handler_callback + @trace_handler_callback = ::DL.callback( "IPS" ) do |cookie,sql| + @trace_handler.call( cookie ? cookie.to_object : nil, sql ) || 0 + end + end + + API.sqlite3_trace( db, block&&@trace_handler_callback, data ) + end + + def create_function( db, name, args, text, cookie, + func, step, final ) + # begin + if @func_handler_callback.nil? && func + @func_handler_callback = ::DL.callback( "0PIP" ) do |context,nargs,args| + args = args.to_s(nargs*4).unpack("L*").map {|i| ::DL::PtrData.new(i)} + data = API.sqlite3_user_data( context ).to_object + data[:func].call( context, *args ) + end + end + + if @step_handler_callback.nil? && step + @step_handler_callback = ::DL.callback( "0PIP" ) do |context,nargs,args| + args = args.to_s(nargs*4).unpack("L*").map {|i| ::DL::PtrData.new(i)} + data = API.sqlite3_user_data( context ).to_object + data[:step].call( context, *args ) + end + end + + if @final_handler_callback.nil? && final + @final_handler_callback = ::DL.callback( "0P" ) do |context| + data = API.sqlite3_user_data( context ).to_object + data[:final].call( context ) + end + end + + data = { :cookie => cookie, + :name => name, + :func => func, + :step => step, + :final => final } + + API.sqlite3_create_function( db, name, args, text, data, + ( func ? @func_handler_callback : nil ), + ( step ? @step_handler_callback : nil ), + ( final ? @final_handler_callback : nil ) ) + end + + def aggregate_context( context ) + ptr = API.sqlite3_aggregate_context( context, 4 ) + ptr.free = nil + obj = ( ptr ? ptr.to_object : nil ) + if obj.nil? + obj = Hash.new + ptr.set_object obj + end + obj + end + + def bind_blob( stmt, index, value ) + s = value.to_s + API.sqlite3_bind_blob( stmt, index, s, s.length, TRANSIENT ) + end + + def bind_text( stmt, index, value, utf16=false ) + s = value.to_s + method = ( utf16 ? :sqlite3_bind_text16 : :sqlite3_bind_text ) + API.send( method, stmt, index, s, s.length, TRANSIENT ) + end + + def column_text( stmt, column ) + result = API.sqlite3_column_text( stmt, column ) + result ? result.to_s : nil + end + + def column_name( stmt, column ) + result = API.sqlite3_column_name( stmt, column ) + result ? result.to_s : nil + end + + def column_decltype( stmt, column ) + result = API.sqlite3_column_decltype( stmt, column ) + result ? result.to_s : nil + end + + def self.api_delegate( name ) + define_method( name ) { |*args| API.send( "sqlite3_#{name}", *args ) } + end + + api_delegate :aggregate_count + api_delegate :bind_double + api_delegate :bind_int + api_delegate :bind_null + api_delegate :bind_parameter_index + api_delegate :bind_parameter_name + api_delegate :busy_timeout + api_delegate :changes + api_delegate :close + api_delegate :column_bytes + api_delegate :column_bytes16 + api_delegate :column_count + api_delegate :column_double + api_delegate :column_int + api_delegate :column_int64 + api_delegate :column_type + api_delegate :data_count + api_delegate :errcode + api_delegate :finalize + api_delegate :interrupt + api_delegate :last_insert_rowid + api_delegate :libversion + api_delegate :reset + api_delegate :result_error + api_delegate :step + api_delegate :total_changes + api_delegate :value_bytes + api_delegate :value_bytes16 + api_delegate :value_double + api_delegate :value_int + api_delegate :value_int64 + api_delegate :value_type + + # ==== EXPERIMENTAL ==== + if defined?( EXPERIMENTAL_API ) && EXPERIMENTAL_API + def progress_handler( db, n, data=nil, &block ) + @progress_handler = block + + unless @progress_handler_callback + @progress_handler_callback = ::DL.callback( "IP" ) do |cookie| + @progress_handler.call( cookie ) + end + end + + API.sqlite3_progress_handler( db, n, block&&@progress_handler_callback, + data ) + end + + def commit_hook( db, data=nil, &block ) + @commit_hook_handler = block + + unless @commit_hook_handler_callback + @commit_hook_handler_callback = ::DL.callback( "IP" ) do |cookie| + @commit_hook_handler.call( cookie ) + end + end + + API.sqlite3_commit_hook( db, block&&@commit_hook_handler_callback, + data ) + end + end + + private + + def utf16_length(ptr) + len = 0 + loop do + break if ptr[len,1] == "\0" + len += 2 + end + len + end + + end + +end ; end ; end diff --git a/vendor/sqlite3-ruby/sqlite3/driver/native/driver.rb b/vendor/sqlite3-ruby/sqlite3/driver/native/driver.rb new file mode 100644 index 00000000..fce2f6db --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/driver/native/driver.rb @@ -0,0 +1,218 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'sqlite3_api' + +module SQLite3 ; module Driver ; module Native + + class Driver + + def initialize + @callback_data = Hash.new + end + + def complete?( sql, utf16=false ) + API.send( utf16 ? :sqlite3_complete16 : :sqlite3_complete, sql ) != 0 + end + + def busy_handler( db, data=nil, &block ) + if block + cb = API::CallbackData.new + cb.proc = block + cb.data = data + end + + API.sqlite3_busy_handler( db, + block ? API::Sqlite3_ruby_busy_handler : nil, cb ) + end + + def set_authorizer( db, data=nil, &block ) + if block + cb = API::CallbackData.new + cb.proc = block + cb.data = data + end + + API.sqlite3_set_authorizer( db, + block ? API::Sqlite3_ruby_authorizer : nil, cb ) + end + + def trace( db, data=nil, &block ) + if block + cb = API::CallbackData.new + cb.proc = block + cb.data = data + end + + API.sqlite3_trace( db, + block ? API::Sqlite3_ruby_trace : nil, cb ) + end + + def open( filename, utf16=false ) + API.send( utf16 ? :sqlite3_open16 : :sqlite3_open, filename ) + end + + def errmsg( db, utf16=false ) + API.send( utf16 ? :sqlite3_errmsg16 : :sqlite3_errmsg, db ) + end + + def prepare( db, sql, utf16=false ) + API.send( ( utf16 ? :sqlite3_prepare16 : :sqlite3_prepare ), + db, sql ) + end + + def bind_text( stmt, index, value, utf16=false ) + API.send( ( utf16 ? :sqlite3_bind_text16 : :sqlite3_bind_text ), + stmt, index, value.to_s ) + end + + def column_name( stmt, index, utf16=false ) + API.send( ( utf16 ? :sqlite3_column_name16 : :sqlite3_column_name ), + stmt, index ) + end + + def column_decltype( stmt, index, utf16=false ) + API.send( + ( utf16 ? :sqlite3_column_decltype16 : :sqlite3_column_decltype ), + stmt, index ) + end + + def column_text( stmt, index, utf16=false ) + API.send( ( utf16 ? :sqlite3_column_text16 : :sqlite3_column_text ), + stmt, index ) + end + + def create_function( db, name, args, text, cookie, func, step, final ) + if func || ( step && final ) + cb = API::CallbackData.new + cb.proc = cb.proc2 = nil + cb.data = cookie + @callback_data[ name ] = cb + else + @callback_data.delete( name ) + end + + if func + cb.proc = func + + func = API::Sqlite3_ruby_function_step + step = final = nil + elsif step && final + cb.proc = step + cb.proc2 = final + + func = nil + step = API::Sqlite3_ruby_function_step + final = API::Sqlite3_ruby_function_final + end + + API.sqlite3_create_function( db, name, args, text, cb, func, step, final ) + end + + def value_text( value, utf16=false ) + method = case utf16 + when nil, false then :sqlite3_value_text + when :le then :sqlite3_value_text16le + when :be then :sqlite3_value_text16be + else :sqlite3_value_text16 + end + + API.send( method, value ) + end + + def result_text( context, result, utf16=false ) + method = case utf16 + when nil, false then :sqlite3_result_text + when :le then :sqlite3_result_text16le + when :be then :sqlite3_result_text16be + else :sqlite3_result_text16 + end + + API.send( method, context, result.to_s ) + end + + def result_error( context, value, utf16=false ) + API.send( ( utf16 ? :sqlite3_result_error16 : :sqlite3_result_error ), + context, value ) + end + + def self.api_delegate( name ) + define_method( name ) { |*args| API.send( "sqlite3_#{name}", *args ) } + end + + api_delegate :libversion + api_delegate :close + api_delegate :last_insert_rowid + api_delegate :changes + api_delegate :total_changes + api_delegate :interrupt + api_delegate :busy_timeout + api_delegate :errcode + api_delegate :bind_blob + api_delegate :bind_double + api_delegate :bind_int + api_delegate :bind_int64 + api_delegate :bind_null + api_delegate :bind_parameter_count + api_delegate :bind_parameter_name + api_delegate :bind_parameter_index + api_delegate :column_count + api_delegate :step + api_delegate :data_count + api_delegate :column_blob + api_delegate :column_bytes + api_delegate :column_bytes16 + api_delegate :column_double + api_delegate :column_int + api_delegate :column_int64 + api_delegate :column_type + api_delegate :finalize + api_delegate :reset + api_delegate :aggregate_count + api_delegate :value_blob + api_delegate :value_bytes + api_delegate :value_bytes16 + api_delegate :value_double + api_delegate :value_int + api_delegate :value_int64 + api_delegate :value_type + api_delegate :result_blob + api_delegate :result_double + api_delegate :result_int + api_delegate :result_int64 + api_delegate :result_null + api_delegate :result_value + api_delegate :aggregate_context + + end + +end ; end ; end diff --git a/vendor/sqlite3-ruby/sqlite3/errors.rb b/vendor/sqlite3-ruby/sqlite3/errors.rb new file mode 100644 index 00000000..5c090bf3 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/errors.rb @@ -0,0 +1,100 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'sqlite3/constants' + +module SQLite3 + + class Exception < ::Exception + @code = 0 + + # The numeric error code that this exception represents. + def self.code + @code + end + + # A convenience for accessing the error code for this exception. + def code + self.class.code + end + end + + class SQLException < Exception; end + class InternalException < Exception; end + class PermissionException < Exception; end + class AbortException < Exception; end + class BusyException < Exception; end + class LockedException < Exception; end + class MemoryException < Exception; end + class ReadOnlyException < Exception; end + class InterruptException < Exception; end + class IOException < Exception; end + class CorruptException < Exception; end + class NotFoundException < Exception; end + class FullException < Exception; end + class CantOpenException < Exception; end + class ProtocolException < Exception; end + class EmptyException < Exception; end + class SchemaChangedException < Exception; end + class TooBigException < Exception; end + class ConstraintException < Exception; end + class MismatchException < Exception; end + class MisuseException < Exception; end + class UnsupportedException < Exception; end + class AuthorizationException < Exception; end + class FormatException < Exception; end + class RangeException < Exception; end + class NotADatabaseException < Exception; end + + EXCEPTIONS = [ + nil, + SQLException, InternalException, PermissionException, + AbortException, BusyException, LockedException, MemoryException, + ReadOnlyException, InterruptException, IOException, CorruptException, + NotFoundException, FullException, CantOpenException, ProtocolException, + EmptyException, SchemaChangedException, TooBigException, + ConstraintException, MismatchException, MisuseException, + UnsupportedException, AuthorizationException, FormatException, + RangeException, NotADatabaseException + ].each_with_index { |e,i| e.instance_variable_set( :@code, i ) if e } + + module Error + def check( result, db=nil, msg=nil ) + unless result == Constants::ErrorCode::OK + msg = ( msg ? msg + ": " : "" ) + db.errmsg if db + raise ( EXCEPTIONS[result] || SQLite3::Exception ), msg + end + end + module_function :check + end + +end diff --git a/vendor/sqlite3-ruby/sqlite3/pragmas.rb b/vendor/sqlite3-ruby/sqlite3/pragmas.rb new file mode 100644 index 00000000..72473871 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/pragmas.rb @@ -0,0 +1,254 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'sqlite3/errors' + +module SQLite3 + + # This module is intended for inclusion solely by the Database class. It + # defines convenience methods for the various pragmas supported by SQLite3. + # + # For a detailed description of these pragmas, see the SQLite3 documentation + # at http://sqlite.org/pragma.html. + module Pragmas + + # Returns +true+ or +false+ depending on the value of the named pragma. + def get_boolean_pragma( name ) + get_first_value( "PRAGMA #{name}" ) != "0" + end + private :get_boolean_pragma + + # Sets the given pragma to the given boolean value. The value itself + # may be +true+ or +false+, or any other commonly used string or + # integer that represents truth. + def set_boolean_pragma( name, mode ) + case mode + when String + case mode.downcase + when "on", "yes", "true", "y", "t": mode = "'ON'" + when "off", "no", "false", "n", "f": mode = "'OFF'" + else + raise Exception, + "unrecognized pragma parameter #{mode.inspect}" + end + when true, 1 + mode = "ON" + when false, 0, nil + mode = "OFF" + else + raise Exception, + "unrecognized pragma parameter #{mode.inspect}" + end + + execute( "PRAGMA #{name}=#{mode}" ) + end + private :set_boolean_pragma + + # Requests the given pragma (and parameters), and if the block is given, + # each row of the result set will be yielded to it. Otherwise, the results + # are returned as an array. + def get_query_pragma( name, *parms, &block ) # :yields: row + if parms.empty? + execute( "PRAGMA #{name}", &block ) + else + args = "'" + parms.join("','") + "'" + execute( "PRAGMA #{name}( #{args} )", &block ) + end + end + private :get_query_pragma + + # Return the value of the given pragma. + def get_enum_pragma( name ) + get_first_value( "PRAGMA #{name}" ) + end + private :get_enum_pragma + + # Set the value of the given pragma to +mode+. The +mode+ parameter must + # conform to one of the values in the given +enum+ array. Each entry in + # the array is another array comprised of elements in the enumeration that + # have duplicate values. See #synchronous, #default_synchronous, + # #temp_store, and #default_temp_store for usage examples. + def set_enum_pragma( name, mode, enums ) + match = enums.find { |p| p.find { |i| i.to_s.downcase == mode.to_s.downcase } } + raise Exception, + "unrecognized #{name} #{mode.inspect}" unless match + execute( "PRAGMA #{name}='#{match.first.upcase}'" ) + end + private :set_enum_pragma + + # Returns the value of the given pragma as an integer. + def get_int_pragma( name ) + get_first_value( "PRAGMA #{name}" ).to_i + end + private :get_int_pragma + + # Set the value of the given pragma to the integer value of the +value+ + # parameter. + def set_int_pragma( name, value ) + execute( "PRAGMA #{name}=#{value.to_i}" ) + end + private :set_int_pragma + + # The enumeration of valid synchronous modes. + SYNCHRONOUS_MODES = [ [ 'full', 2 ], [ 'normal', 1 ], [ 'off', 0 ] ] + + # The enumeration of valid temp store modes. + TEMP_STORE_MODES = [ [ 'default', 0 ], [ 'file', 1 ], [ 'memory', 2 ] ] + + # Does an integrity check on the database. If the check fails, a + # SQLite3::Exception will be raised. Otherwise it + # returns silently. + def integrity_check + execute( "PRAGMA integrity_check" ) do |row| + raise Exception, row[0] if row[0] != "ok" + end + end + + def auto_vacuum + get_boolean_pragma "auto_vacuum" + end + + def auto_vacuum=( mode ) + set_boolean_pragma "auto_vacuum", mode + end + + def schema_cookie + get_int_pragma "schema_cookie" + end + + def schema_cookie=( cookie ) + set_int_pragma "schema_cookie", cookie + end + + def user_cookie + get_int_pragma "user_cookie" + end + + def user_cookie=( cookie ) + set_int_pragma "user_cookie", cookie + end + + def cache_size + get_int_pragma "cache_size" + end + + def cache_size=( size ) + set_int_pragma "cache_size", size + end + + def default_cache_size + get_int_pragma "default_cache_size" + end + + def default_cache_size=( size ) + set_int_pragma "default_cache_size", size + end + + def default_synchronous + get_enum_pragma "default_synchronous" + end + + def default_synchronous=( mode ) + set_enum_pragma "default_synchronous", mode, SYNCHRONOUS_MODES + end + + def synchronous + get_enum_pragma "synchronous" + end + + def synchronous=( mode ) + set_enum_pragma "synchronous", mode, SYNCHRONOUS_MODES + end + + def default_temp_store + get_enum_pragma "default_temp_store" + end + + def default_temp_store=( mode ) + set_enum_pragma "default_temp_store", mode, TEMP_STORE_MODES + end + + def temp_store + get_enum_pragma "temp_store" + end + + def temp_store=( mode ) + set_enum_pragma "temp_store", mode, TEMP_STORE_MODES + end + + def full_column_names + get_boolean_pragma "full_column_names" + end + + def full_column_names=( mode ) + set_boolean_pragma "full_column_names", mode + end + + def parser_trace + get_boolean_pragma "parser_trace" + end + + def parser_trace=( mode ) + set_boolean_pragma "parser_trace", mode + end + + def vdbe_trace + get_boolean_pragma "vdbe_trace" + end + + def vdbe_trace=( mode ) + set_boolean_pragma "vdbe_trace", mode + end + + def database_list( &block ) # :yields: row + get_query_pragma "database_list", &block + end + + def foreign_key_list( table, &block ) # :yields: row + get_query_pragma "foreign_key_list", table, &block + end + + def index_info( index, &block ) # :yields: row + get_query_pragma "index_info", index, &block + end + + def index_list( table, &block ) # :yields: row + get_query_pragma "index_list", table, &block + end + + def table_info( table, &block ) # :yields: row + get_query_pragma "table_info", table, &block + end + + end + +end diff --git a/vendor/sqlite3-ruby/sqlite3/resultset.rb b/vendor/sqlite3-ruby/sqlite3/resultset.rb new file mode 100644 index 00000000..d90073c4 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/resultset.rb @@ -0,0 +1,189 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'sqlite3/constants' +require 'sqlite3/errors' + +module SQLite3 + + # The ResultSet object encapsulates the enumerability of a query's output. + # It is a simple cursor over the data that the query returns. It will + # very rarely (if ever) be instantiated directly. Instead, client's should + # obtain a ResultSet instance via Statement#execute. + class ResultSet + include Enumerable + + # A trivial module for adding a +types+ accessor to an object. + module TypesContainer + attr_accessor :types + end + + # A trivial module for adding a +fields+ accessor to an object. + module FieldsContainer + attr_accessor :fields + end + + # Create a new ResultSet attached to the given database, using the + # given sql text. + def initialize( db, stmt ) + @db = db + @driver = @db.driver + @stmt = stmt + commence + end + + # A convenience method for compiling the virtual machine and stepping + # to the first row of the result set. + def commence + result = @driver.step( @stmt.handle ) + check result + @first_row = true + end + private :commence + + def check( result ) + @eof = ( result == Constants::ErrorCode::DONE ) + found = ( result == Constants::ErrorCode::ROW ) + Error.check( result, @db ) unless @eof || found + end + private :check + + # Reset the cursor, so that a result set which has reached end-of-file + # can be rewound and reiterated. + def reset( *bind_params ) + @stmt.must_be_open! + @driver.reset( @stmt.handle ) + @stmt.bind_params( *bind_params ) + @eof = false + commence + end + + # Query whether the cursor has reached the end of the result set or not. + def eof? + @eof + end + + # Obtain the next row from the cursor. If there are no more rows to be + # had, this will return +nil+. If type translation is active on the + # corresponding database, the values in the row will be translated + # according to their types. + # + # The returned value will be an array, unless Database#results_as_hash has + # been set to +true+, in which case the returned value will be a hash. + # + # For arrays, the column names are accessible via the +fields+ property, + # and the column types are accessible via the +types+ property. + # + # For hashes, the column names are the keys of the hash, and the column + # types are accessible via the +types+ property. + def next + return nil if @eof + + @stmt.must_be_open! + + unless @first_row + result = @driver.step( @stmt.handle ) + check result + end + + @first_row = false + + unless @eof + row = [] + @driver.data_count( @stmt.handle ).times do |column| + case @driver.column_type( @stmt.handle, column ) + when Constants::ColumnType::NULL then + row << nil + when Constants::ColumnType::BLOB then + row << @driver.column_blob( @stmt.handle, column ) + else + row << @driver.column_text( @stmt.handle, column ) + end + end + + if @db.type_translation + row = @stmt.types.zip( row ).map do |type, value| + @db.translator.translate( type, value ) + end + end + + if @db.results_as_hash + new_row = Hash[ *( @stmt.columns.zip( row ).flatten ) ] + row.each_with_index { |value,idx| new_row[idx] = value } + row = new_row + else + row.extend FieldsContainer unless row.respond_to?(:fields) + row.fields = @stmt.columns + end + + row.extend TypesContainer + row.types = @stmt.types + + return row + end + + nil + end + + # Required by the Enumerable mixin. Provides an internal iterator over the + # rows of the result set. + def each + while row=self.next + yield row + end + end + + # Closes the statement that spawned this result set. + # Use with caution! Closing a result set will automatically + # close any other result sets that were spawned from the same statement. + def close + @stmt.close + end + + # Queries whether the underlying statement has been closed or not. + def closed? + @stmt.closed? + end + + # Returns the types of the columns returned by this result set. + def types + @stmt.types + end + + # Returns the names of the columns returned by this result set. + def columns + @stmt.columns + end + + end + +end diff --git a/vendor/sqlite3-ruby/sqlite3/statement.rb b/vendor/sqlite3-ruby/sqlite3/statement.rb new file mode 100644 index 00000000..af26d425 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/statement.rb @@ -0,0 +1,240 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'sqlite3/errors' +require 'sqlite3/resultset' + +class String + def to_blob + SQLite3::Blob.new( self ) + end +end + +module SQLite3 + + # A class for differentiating between strings and blobs, when binding them + # into statements. + class Blob < String; end + + # A statement represents a prepared-but-unexecuted SQL query. It will rarely + # (if ever) be instantiated directly by a client, and is most often obtained + # via the Database#prepare method. + class Statement + + # This is any text that followed the first valid SQL statement in the text + # with which the statement was initialized. If there was no trailing text, + # this will be the empty string. + attr_reader :remainder + + # The underlying opaque handle used to access the SQLite @driver. + attr_reader :handle + + # Create a new statement attached to the given Database instance, and which + # encapsulates the given SQL text. If the text contains more than one + # statement (i.e., separated by semicolons), then the #remainder property + # will be set to the trailing text. + def initialize( db, sql, utf16=false ) + @db = db + @driver = @db.driver + @closed = false + result, @handle, @remainder = @driver.prepare( @db.handle, sql ) + Error.check( result, @db ) + end + + # Closes the statement by finalizing the underlying statement + # handle. The statement must not be used after being closed. + def close + must_be_open! + @closed = true + @driver.finalize( @handle ) + end + + # Returns true if the underlying statement has been closed. + def closed? + @closed + end + + # Binds the given variables to the corresponding placeholders in the SQL + # text. + # + # See Database#execute for a description of the valid placeholder + # syntaxes. + # + # Example: + # + # stmt = db.prepare( "select * from table where a=? and b=?" ) + # stmt.bind_params( 15, "hello" ) + # + # See also #execute, #bind_param, Statement#bind_param, and + # Statement#bind_params. + def bind_params( *bind_vars ) + index = 1 + bind_vars.flatten.each do |var| + if Hash === var + var.each { |key, val| bind_param key, val } + else + bind_param index, var + index += 1 + end + end + end + + # Binds value to the named (or positional) placeholder. If +param+ is a + # Fixnum, it is treated as an index for a positional placeholder. + # Otherwise it is used as the name of the placeholder to bind to. + # + # See also #bind_params. + def bind_param( param, value ) + must_be_open! + if Fixnum === param + case value + when Integer then + @driver.bind_int( @handle, param, value ) + when Numeric then + @driver.bind_double( @handle, param, value.to_f ) + when Blob then + @driver.bind_blob( @handle, param, value ) + when nil then + @driver.bind_null( @handle, param ) + else + @driver.bind_text( @handle, param, value ) + end + else + index = @driver.bind_parameter_index( + @handle, param.to_s ) + raise Exception, "no such bind parameter '#{param}'" if index == 0 + bind_param index, value + end + end + + # Execute the statement. This creates a new ResultSet object for the + # statement's virtual machine. If a block was given, the new ResultSet will + # be yielded to it; otherwise, the ResultSet will be returned. + # + # Any parameters will be bound to the statement using #bind_params. + # + # Example: + # + # stmt = db.prepare( "select * from table" ) + # stmt.execute do |result| + # ... + # end + # + # See also #bind_params, #execute!. + def execute( *bind_vars ) + must_be_open! + @driver.reset( @handle ) if @results + + bind_params *bind_vars unless bind_vars.empty? + @results = ResultSet.new( @db, self ) + + if block_given? + yield @results + else + return @results + end + end + + # Execute the statement. If no block was given, this returns an array of + # rows returned by executing the statement. Otherwise, each row will be + # yielded to the block. + # + # Any parameters will be bound to the statement using #bind_params. + # + # Example: + # + # stmt = db.prepare( "select * from table" ) + # stmt.execute! do |row| + # ... + # end + # + # See also #bind_params, #execute. + def execute!( *bind_vars ) + result = execute( *bind_vars ) + rows = [] unless block_given? + while row = result.next + if block_given? + yield row + else + rows << row + end + end + rows + end + + # Return an array of the column names for this statement. Note that this + # may execute the statement in order to obtain the metadata; this makes it + # a (potentially) expensive operation. + def columns + get_metadata unless @columns + return @columns + end + + # Return an array of the data types for each column in this statement. Note + # that this may execute the statement in order to obtain the metadata; this + # makes it a (potentially) expensive operation. + def types + get_metadata unless @types + return @types + end + + # A convenience method for obtaining the metadata about the query. Note + # that this will actually execute the SQL, which means it can be a + # (potentially) expensive operation. + def get_metadata + must_be_open! + + @columns = [] + @types = [] + + column_count = @driver.column_count( @handle ) + column_count.times do |column| + @columns << @driver.column_name( @handle, column ) + @types << @driver.column_decltype( @handle, column ) + end + + @columns.freeze + @types.freeze + end + private :get_metadata + + # Performs a sanity check to ensure that the statement is not + # closed. If it is, an exception is raised. + def must_be_open! # :nodoc: + if @closed + raise SQLite3::Exception, "cannot use a closed statement" + end + end + + end + +end diff --git a/vendor/sqlite3-ruby/sqlite3/translator.rb b/vendor/sqlite3-ruby/sqlite3/translator.rb new file mode 100644 index 00000000..1ee315e4 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/translator.rb @@ -0,0 +1,135 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'time' + +module SQLite3 + + # The Translator class encapsulates the logic and callbacks necessary for + # converting string data to a value of some specified type. Every Database + # instance may have a Translator instance, in order to assist in type + # translation (Database#type_translation). + # + # Further, applications may define their own custom type translation logic + # by registering translator blocks with the corresponding database's + # translator instance (Database#translator). + class Translator + + # Create a new Translator instance. It will be preinitialized with default + # translators for most SQL data types. + def initialize + @translators = Hash.new( proc { |type,value| value } ) + register_default_translators + end + + # Add a new translator block, which will be invoked to process type + # translations to the given type. The type should be an SQL datatype, and + # may include parentheses (i.e., "VARCHAR(30)"). However, any parenthetical + # information is stripped off and discarded, so type translation decisions + # are made solely on the "base" type name. + # + # The translator block itself should accept two parameters, "type" and + # "value". In this case, the "type" is the full type name (including + # parentheses), so the block itself may include logic for changing how a + # type is translated based on the additional data. The "value" parameter + # is the (string) data to convert. + # + # The block should return the translated value. + def add_translator( type, &block ) # :yields: type, value + @translators[ type_name( type ) ] = block + end + + # Translate the given string value to a value of the given type. In the + # absense of an installed translator block for the given type, the value + # itself is always returned. Further, +nil+ values are never translated, + # and are always passed straight through regardless of the type parameter. + def translate( type, value ) + unless value.nil? + @translators[ type_name( type ) ].call( type, value ) + end + end + + # A convenience method for working with type names. This returns the "base" + # type name, without any parenthetical data. + def type_name( type ) + type = $1 if type =~ /^(.*?)\(/ + type.upcase + end + private :type_name + + # Register the default translators for the current Translator instance. + # This includes translators for most major SQL data types. + def register_default_translators + [ "date", + "datetime", + "time" ].each { |type| add_translator( type ) { |t,v| Time.parse( v ) } } + + [ "decimal", + "float", + "numeric", + "double", + "real", + "dec", + "fixed" ].each { |type| add_translator( type ) { |t,v| v.to_f } } + + [ "integer", + "smallint", + "mediumint", + "int", + "bigint" ].each { |type| add_translator( type ) { |t,v| v.to_i } } + + [ "bit", + "bool", + "boolean" ].each do |type| + add_translator( type ) do |t,v| + !( v.strip.gsub(/00+/,"0") == "0" || + v.downcase == "false" || + v.downcase == "f" || + v.downcase == "no" || + v.downcase == "n" ) + end + end + + add_translator( "timestamp" ) { |type, value| Time.at( value.to_i ) } + add_translator( "tinyint" ) do |type, value| + if type =~ /\(\s*1\s*\)/ + value.to_i == 1 + else + value.to_i + end + end + end + private :register_default_translators + + end + +end diff --git a/vendor/sqlite3-ruby/sqlite3/value.rb b/vendor/sqlite3-ruby/sqlite3/value.rb new file mode 100644 index 00000000..fb763763 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/value.rb @@ -0,0 +1,89 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +require 'sqlite3/constants' + +module SQLite3 + + class Value + attr_reader :handle + + def initialize( db, handle ) + @driver = db.driver + @handle = handle + end + + def null? + type == :null + end + + def to_blob + @driver.value_blob( @handle ) + end + + def length( utf16=false ) + if utf16 + @driver.value_bytes16( @handle ) + else + @driver.value_bytes( @handle ) + end + end + + def to_f + @driver.value_double( @handle ) + end + + def to_i + @driver.value_int( @handle ) + end + + def to_int64 + @driver.value_int64( @handle ) + end + + def to_s( utf16=false ) + @driver.value_text( @handle, utf16 ) + end + + def type + case @driver.value_type( @handle ) + when Constants::ColumnType::INTEGER then :int + when Constants::ColumnType::FLOAT then :float + when Constants::ColumnType::TEXT then :text + when Constants::ColumnType::BLOB then :blob + when Constants::ColumnType::NULL then :null + end + end + + end + +end diff --git a/vendor/sqlite3-ruby/sqlite3/version.rb b/vendor/sqlite3-ruby/sqlite3/version.rb new file mode 100644 index 00000000..b6e22e17 --- /dev/null +++ b/vendor/sqlite3-ruby/sqlite3/version.rb @@ -0,0 +1,45 @@ +#-- +# ============================================================================= +# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of its contributors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ============================================================================= +#++ + +module SQLite3 + + module Version + + MAJOR = 1 + MINOR = 1 + TINY = 0 + + STRING = [ MAJOR, MINOR, TINY ].join( "." ) + + end + +end