From: <asf...@us...> - 2009-06-11 21:30:19
|
Revision: 928 http://firebird.svn.sourceforge.net/firebird/?rev=928&view=rev Author: asfernandes Date: 2009-06-11 21:30:13 +0000 (Thu, 11 Jun 2009) Log Message: ----------- Clone files from Firebird core Added Paths: ----------- java-plugin/trunk/src/native/jaygds/source/AutoPtr.h java-plugin/trunk/src/native/jaygds/source/external/FirebirdApi.h java-plugin/trunk/src/native/jaygds/source/external/FirebirdExternalApi.h java-plugin/trunk/src/native/jaygds/source/external/FirebirdPluginApi.h Added: java-plugin/trunk/src/native/jaygds/source/AutoPtr.h =================================================================== --- java-plugin/trunk/src/native/jaygds/source/AutoPtr.h (rev 0) +++ java-plugin/trunk/src/native/jaygds/source/AutoPtr.h 2009-06-11 21:30:13 UTC (rev 928) @@ -0,0 +1,188 @@ +/* + * PROGRAM: JRD Access Method + * MODULE: auto.h + * DESCRIPTION: STL::auto_ptr replacement + * + * *** warning *** + * Unlike STL's auto_ptr ALWAYS deletes ptr in destructor - + * no ownership flag! + * + * The contents of this file are subject to the Initial + * Developer's Public License Version 1.0 (the "License"); + * you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl. + * + * Software distributed under the License is distributed AS IS, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. + * See the License for the specific language governing rights + * and limitations under the License. + * + * The Original Code was created by Alexander Peshkoff + * for the Firebird Open Source RDBMS project. + * + * Copyright (c) 2004 Alexander Peshkoff <pes...@ma...> + * and all contributors signed below. + * + * All Rights Reserved. + * Contributor(s): ______________________________________. + */ + +#ifndef CLASSES_AUTO_PTR_H +#define CLASSES_AUTO_PTR_H + +#include <stddef.h> + + +namespace Firebird { + + +template <typename What> +class SimpleDelete +{ +public: + static void clear(What* ptr) + { + delete ptr; + } +}; + +template <typename What> +class ArrayDelete +{ +public: + static void clear(What* ptr) + { + delete[] ptr; + } +}; + +template <typename Where, typename Clear = SimpleDelete<Where> > +class AutoPtr +{ +private: + Where* ptr; +public: + AutoPtr<Where, Clear>(Where* v = NULL) + : ptr(v) + {} + + ~AutoPtr() + { + Clear::clear(ptr); + } + + AutoPtr<Where, Clear>& operator= (Where* v) + { + Clear::clear(ptr); + ptr = v; + return *this; + } + + operator Where*() + { + return ptr; + } + + bool operator !() const + { + return !ptr; + } + + Where* operator->() + { + return ptr; + } + + Where* release() + { + Where* tmp = ptr; + ptr = NULL; + return tmp; + } + + void reset(Where* v = NULL) + { + if (v != ptr) { + Clear::clear(ptr); + ptr = v; + } + } + +private: + AutoPtr<Where, Clear>(AutoPtr<Where, Clear>&); + void operator=(AutoPtr<Where, Clear>&); +}; + +template <typename Where> +class AutoArrayPtr : public AutoPtr<Where, SimpleDelete<Where> > +{ +public: + AutoArrayPtr<Where>(Where* v = NULL) + : AutoPtr<Where, SimpleDelete<Where> >(v) + {} +}; + + +template <typename T> +class AutoSetRestore +{ +public: + AutoSetRestore(T* aValue, T newValue) + : value(aValue), + oldValue(*aValue) + { + *value = newValue; + } + + ~AutoSetRestore() + { + *value = oldValue; + } + +private: + // copying is prohibited + AutoSetRestore(const AutoSetRestore&); + AutoSetRestore& operator =(const AutoSetRestore&); + + T* value; + T oldValue; +}; + +template <typename T, typename T2> +class AutoSetRestore2 +{ +private: + typedef T (T2::*Getter)(); + typedef void (T2::*Setter)(T); + +public: + AutoSetRestore2(T2* aPointer, Getter aGetter, Setter aSetter, T newValue) + : pointer(aPointer), + setter(aSetter), + oldValue((aPointer->*aGetter)()) + { + (aPointer->*aSetter)(newValue); + } + + ~AutoSetRestore2() + { + (pointer->*setter)(oldValue); + } + +private: + // copying is prohibited + AutoSetRestore2(const AutoSetRestore2&); + AutoSetRestore2& operator =(const AutoSetRestore2&); + +private: + T2* pointer; + Setter setter; + T oldValue; +}; + + +} //namespace Firebird + +#endif // CLASSES_AUTO_PTR_H + Property changes on: java-plugin/trunk/src/native/jaygds/source/AutoPtr.h ___________________________________________________________________ Added: svn:eol-style + native Added: java-plugin/trunk/src/native/jaygds/source/external/FirebirdApi.h =================================================================== --- java-plugin/trunk/src/native/jaygds/source/external/FirebirdApi.h (rev 0) +++ java-plugin/trunk/src/native/jaygds/source/external/FirebirdApi.h 2009-06-11 21:30:13 UTC (rev 928) @@ -0,0 +1,215 @@ +/* + * The contents of this file are subject to the Initial + * Developer's Public License Version 1.0 (the "License"); + * you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl. + * + * Software distributed under the License is distributed AS IS, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. + * See the License for the specific language governing rights + * and limitations under the License. + * + * The Original Code was created by Adriano dos Santos Fernandes + * for the Firebird Open Source RDBMS project, based on previous work done + * by Eugeney Putilin <evgeneyputilin at mail.ru>, + * Vlad Khorsun <hvlad at users.sourceforge.net> and + * Roman Rokytskyy <roman at rokytskyy.de>. + * + * Copyright (c) 2008 Adriano dos Santos Fernandes <adr...@uo...> + * and all contributors signed below. + * + * All Rights Reserved. + * Contributor(s): ______________________________________. + * Eugeney Putilin <evgeneyputilin at mail.ru> + * Vlad Khorsun <hvlad at users.sourceforge.net> + * Roman Rokytskyy <roman at rokytskyy.de> + */ + +#ifndef FIREBIRD_API_H +#define FIREBIRD_API_H + +#ifdef __GNUC__ +# pragma GCC system_header // disable warning about non-existent virtual destructor +#endif + +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) +# define FB_CALL __stdcall +#else +# define FB_CALL +#endif + +#define FB_NULL 0L + + +namespace Firebird { + + +typedef unsigned int uint; +typedef short int16; +typedef int int32; + +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) && !defined(__GNUC__) +typedef __int64 int64; +#else +typedef long long int int64; +#endif + +typedef char Utf8; // Utf8* used as nul-terminated string + +// ISC compatible handle +#if defined(_LP64) || defined(__LP64__) || defined(__arch64__) || defined(_WIN64) +typedef unsigned int Handle; +#else +typedef void* Handle; +#endif + + +struct Date +{ + int year; + int month; + int day; +}; + + +struct Time +{ + int hours; + int minutes; + int seconds; + int fractions; +}; + + +struct DateTime //// FIXME: rename to TimeStamp +{ + Date date; + Time time; +}; + + +class Error +{ +public: + virtual bool FB_CALL addCode(int32 code) = 0; + virtual bool FB_CALL addString(const char* str, uint strLength) = 0; +}; + + +// Interface used in cases which an instance is created by one layer and released by another one. +class Disposable +{ +public: + // Disposes the object. + virtual void FB_CALL dispose(Error* error) = 0; +}; + + +class Attachment : public Disposable +{ +public: + // Get an ISC compatible attachment handle. + virtual Handle FB_CALL getHandle(Error* error) const = 0; + + virtual const char* FB_CALL getUserName() const = 0; + virtual const char* FB_CALL getDatabaseName() const = 0; +}; + + +class Transaction +{ +public: + // Get an ISC compatible transaction handle. + virtual Handle FB_CALL getHandle(Error* error) const = 0; +}; + + +// Represents a parameter or column. +class Value +{ +public: + // data types + enum Type + { + TYPE_SMALLINT = 1, + TYPE_INTEGER, + TYPE_BIGINT, + TYPE_DOUBLE, + TYPE_CHAR, + TYPE_VARCHAR, + TYPE_BLOB, + TYPE_DATE, + TYPE_TIME, + TYPE_TIMESTAMP + }; + +public: + // Get parameter or column name. + virtual const char* FB_CALL getName(Error* error) const = 0; + + virtual Type FB_CALL getType(Error* error) const = 0; + virtual const char* FB_CALL getCharSet(Error* error) const = 0; + + // Get BLOB sub-type. + virtual int FB_CALL getSubType(Error* error) const = 0; + + // Get numeric precision or maximum string length. + virtual int FB_CALL getPrecision(Error* error) const = 0; + + virtual int FB_CALL getScale(Error* error) const = 0; + virtual bool FB_CALL isNullable(Error* error) const = 0; + + virtual bool FB_CALL isNull() const = 0; + virtual void FB_CALL setNull(Error* error) = 0; + + virtual void FB_CALL copyFrom(Error* error, const Value* from) = 0; + + virtual int16 FB_CALL getSmallInt(Error* error, int scale = 0, bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setSmallInt(Error* error, int16 value, int scale = 0) = 0; + + virtual int32 FB_CALL getInt(Error* error, int scale = 0, bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setInt(Error* error, int32 value, int scale = 0) = 0; + + virtual int64 FB_CALL getBigInt(Error* error, int scale = 0, bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setBigInt(Error* error, int64 value, int scale = 0) = 0; + + virtual double FB_CALL getDouble(Error* error, bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setDouble(Error* error, double value) = 0; + + virtual const char* FB_CALL getString(Error* error, uint* strLength = FB_NULL, + bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setString(Error* error, const char* str, uint strLength) = 0; + + virtual int64 FB_CALL getBlobId(Error* error, bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setBlobId(Error* error, int64 value) = 0; + + virtual void FB_CALL getDate(Error* error, Date* value, bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setDate(Error* error, const Date* value) = 0; + + virtual void FB_CALL getTime(Error* error, Time* value, bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setTime(Error* error, const Time* value) = 0; + + virtual void FB_CALL getTimeStamp(Error* error, DateTime* value, bool* isNull = FB_NULL) const = 0; + virtual void FB_CALL setTimeStamp(Error* error, const DateTime* value) = 0; +}; + + +// Represents a group of parameters or columns. +class Values +{ +public: + virtual uint FB_CALL getCount() const = 0; + virtual uint FB_CALL getIndexByName(Error* error, const char* name) const = 0; + + // Get a given value. The first value is at index 1. + virtual Value* FB_CALL getValue(Error* error, uint index) const = 0; + + virtual Value* FB_CALL getValueByName(Error* error, const char* name) const = 0; +}; + + +} // namespace Firebird + + +#endif // FIREBIRD_API_H Property changes on: java-plugin/trunk/src/native/jaygds/source/external/FirebirdApi.h ___________________________________________________________________ Added: svn:eol-style + native Added: java-plugin/trunk/src/native/jaygds/source/external/FirebirdExternalApi.h =================================================================== --- java-plugin/trunk/src/native/jaygds/source/external/FirebirdExternalApi.h (rev 0) +++ java-plugin/trunk/src/native/jaygds/source/external/FirebirdExternalApi.h 2009-06-11 21:30:13 UTC (rev 928) @@ -0,0 +1,186 @@ +/* + * The contents of this file are subject to the Initial + * Developer's Public License Version 1.0 (the "License"); + * you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl. + * + * Software distributed under the License is distributed AS IS, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. + * See the License for the specific language governing rights + * and limitations under the License. + * + * The Original Code was created by Adriano dos Santos Fernandes + * for the Firebird Open Source RDBMS project, based on previous work done + * by Eugeney Putilin <evgeneyputilin at mail.ru>, + * Vlad Khorsun <hvlad at users.sourceforge.net> and + * Roman Rokytskyy <roman at rokytskyy.de>. + * + * Copyright (c) 2008 Adriano dos Santos Fernandes <adr...@uo...> + * and all contributors signed below. + * + * All Rights Reserved. + * Contributor(s): ______________________________________. + * Eugeney Putilin <evgeneyputilin at mail.ru> + * Vlad Khorsun <hvlad at users.sourceforge.net> + * Roman Rokytskyy <roman at rokytskyy.de> + */ + +#ifndef FIREBIRD_EXTERNAL_API_H +#define FIREBIRD_EXTERNAL_API_H + +#ifdef __GNUC__ +# pragma GCC system_header // disable warning about non-existent virtual destructor +#endif + +#include "FirebirdApi.h" + + +namespace Firebird { + +class ExternalEngine; + + +const int EXTERNAL_VERSION_1 = 1; + + +// Connection to current database in external engine. +// Context passed to ExternalEngine has SYSDBA privileges. +// Context passed to ExternalFunction, ExternalProcedure and ExternalTrigger +// has user privileges. +// There is one ExternalContext per attachment. The privileges and character +// set properties are changed during the calls. +class ExternalContext +{ +public: + // Gets the ExternalEngine associated with this context. + virtual ExternalEngine* FB_CALL getEngine(Error* error) = 0; + + // Gets the Attachment associated with this context. + virtual Attachment* FB_CALL getAttachment(Error* error) = 0; + + // Obtained transaction is valid only before control is returned to the engine + // or in ExternalResultSet::fetch calls of correspondent ExternalProcedure::open. + virtual Transaction* FB_CALL getTransaction(Error* error) = 0; + + // Get user attachment character set. + virtual const Utf8* FB_CALL getClientCharSet() = 0; + + // Misc info associated with a context. The pointers are never accessed or freed by Firebird. + + // Obtains an unique (across all contexts) code to associate plugin and/or user information. + virtual int FB_CALL obtainInfoCode() = 0; + // Gets a value associated with this code or FB_NULL if no value was set. + virtual void* FB_CALL getInfo(int code) = 0; + // Sets a value associated with this code and returns the last value. + virtual void* FB_CALL setInfo(int code, void* value) = 0; +}; + + +// To return set of rows in selectable procedures. +class ExternalResultSet : public Disposable +{ +public: + virtual bool FB_CALL fetch(Error* error) = 0; +}; + + +class ExternalFunction : public Disposable +{ +public: + // This method is called just before execute and informs the engine our requested character + // set for data exchange inside that method. + // During this call, the context uses the character set obtained from ExternalEngine::getCharSet. + virtual void FB_CALL getCharSet(Error* error, ExternalContext* context, + Utf8* name, uint nameSize) = 0; + + virtual void FB_CALL execute(Error* error, ExternalContext* context, Values* params, + Value* result) = 0; +}; + + +class ExternalProcedure : public Disposable +{ +public: + // This method is called just before open and informs the engine our requested character + // set for data exchange inside that method and ExternalResultSet::fetch. + // During this call, the context uses the character set obtained from ExternalEngine::getCharSet. + virtual void FB_CALL getCharSet(Error* error, ExternalContext* context, + Utf8* name, uint nameSize) = 0; + + virtual ExternalResultSet* FB_CALL open(Error* error, ExternalContext* context, + Values* params, Values* results) = 0; +}; + + +class ExternalTrigger : public Disposable +{ +public: + enum Type + { + TYPE_BEFORE = 1, + TYPE_AFTER, + TYPE_DATABASE + }; + + enum Action + { + ACTION_INSERT = 1, + ACTION_UPDATE, + ACTION_DELETE, + ACTION_CONNECT, + ACTION_DISCONNECT, + ACTION_TRANS_START, + ACTION_TRANS_COMMIT, + ACTION_TRANS_ROLLBACK, + ACTION_DDL + }; + +public: + // This method is called just before execute and informs the engine our requested character + // set for data exchange inside that method. + // During this call, the context uses the character set obtained from ExternalEngine::getCharSet. + virtual void FB_CALL getCharSet(Error* error, ExternalContext* context, + Utf8* name, uint nameSize) = 0; + + virtual void FB_CALL execute(Error* error, ExternalContext* context, + Action action, const Values* oldValues, Values* newValues) = 0; +}; + + +// In SuperServer, shared by all attachments to one database and disposed when last (non-external) +// user attachment to the database is closed. +class ExternalEngine : public Disposable +{ +public: + virtual int FB_CALL getVersion(Error* error) = 0; + + // This method is called once (per ExternalEngine instance) before any following methods. + // The requested character set for data exchange inside methods of this interface should + // be copied to charSet parameter. + // During this call, the context uses the UTF-8 character set. + virtual void FB_CALL open(Error* error, ExternalContext* context, + Utf8* charSet, uint charSetSize) = 0; + + // Attachment is being opened. + virtual void FB_CALL openAttachment(Error* error, ExternalContext* context) = 0; + + // Attachment is being closed. + virtual void FB_CALL closeAttachment(Error* error, ExternalContext* context) = 0; + + // Called when engine wants to load object in the cache. Objects are disposed when + // going out of the cache. + virtual ExternalFunction* FB_CALL makeFunction(Error* error, ExternalContext* context, + const char* package, const char* name, const char* entryPoint, const char* body) = 0; + virtual ExternalProcedure* FB_CALL makeProcedure(Error* error, ExternalContext* context, + const char* package, const char* name, const char* entryPoint, const char* body) = 0; + virtual ExternalTrigger* FB_CALL makeTrigger(Error* error, ExternalContext* context, + const char* name, const char* entryPoint, const char* body, + const char* table, ExternalTrigger::Type type) = 0; +}; + + +} // namespace Firebird + + +#endif // FIREBIRD_EXTERNAL_API_H Property changes on: java-plugin/trunk/src/native/jaygds/source/external/FirebirdExternalApi.h ___________________________________________________________________ Added: svn:eol-style + native Added: java-plugin/trunk/src/native/jaygds/source/external/FirebirdPluginApi.h =================================================================== --- java-plugin/trunk/src/native/jaygds/source/external/FirebirdPluginApi.h (rev 0) +++ java-plugin/trunk/src/native/jaygds/source/external/FirebirdPluginApi.h 2009-06-11 21:30:13 UTC (rev 928) @@ -0,0 +1,73 @@ +/* + * The contents of this file are subject to the Initial + * Developer's Public License Version 1.0 (the "License"); + * you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl. + * + * Software distributed under the License is distributed AS IS, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. + * See the License for the specific language governing rights + * and limitations under the License. + * + * The Original Code was created by Adriano dos Santos Fernandes + * for the Firebird Open Source RDBMS project. + * + * Copyright (c) 2008 Adriano dos Santos Fernandes <adr...@uo...> + * and all contributors signed below. + * + * All Rights Reserved. + * Contributor(s): ______________________________________. + */ + +#ifndef FIREBIRD_PLUGIN_API_H +#define FIREBIRD_PLUGIN_API_H + +#ifdef __GNUC__ +# pragma GCC system_header // disable warning about non-existent virtual destructor +#endif + +#include "FirebirdApi.h" + +#define FB_PLUGIN_ENTRY_POINT firebirdPlugin + + +namespace Firebird { + +class ExternalEngine; + + +const int PLUGIN_VERSION_1 = 1; + + +class ExternalEngineFactory +{ +public: + // Strings passed to error->addString during this call are assumed to be UTF-8. + virtual ExternalEngine* FB_CALL createEngine(Error* error, int version, + const char* name) = 0; +}; + + +// Passed to plugin library through entry point FB_PLUGIN_ENTRY_POINT in Firebird initialization. +class Plugin +{ +public: + virtual int FB_CALL getVersion() = 0; + virtual const char* FB_CALL getName() = 0; + virtual const char* FB_CALL getLibraryName() = 0; + virtual uint FB_CALL getConfigInfoCount() = 0; + virtual void FB_CALL getConfigInfo(Error* error, uint index, // first index is 0 + const char** key, const char** value) = 0; + + virtual void FB_CALL setExternalEngineFactory(ExternalEngineFactory* factory) = 0; +}; + + +typedef void (*PluginEntryPoint)(Error* error, Plugin* plugin); + + +} // namespace Firebird + + +#endif // FIREBIRD_PLUGIN_API_H Property changes on: java-plugin/trunk/src/native/jaygds/source/external/FirebirdPluginApi.h ___________________________________________________________________ Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |