8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-27 18:03:04 +01:00
firebird-mirror/src/include/FirebirdApi.h
asfernandes ed0e0daeb3 - External Engines implementation.
- Plugins API.

- Feature CORE-2700 - UDR (User Defined Routines) Engine - C++ API supporting functions, triggers and stored procedures.
- Feature CORE-2470 - Support for alternate format of strings literals.
- Feature CORE-2310 - DDL triggers.
- Feature CORE-2312 - PSQL Packages.
- Feature CORE-1209 - CONTINUE statement.
- Feature CORE-1180 - DDL syntax to change (not) nullable state of columns.
- Feature CORE-2090 - Support OVER () clause with current aggregate functions.

- Fixed CORE-2699 - Common table expression context could be used with parameters.

- Introduce ODS 12.0.

- Work in progress in type-safe parser.
- Refactor some DDL commands (procedures and triggers) from DYN to DdlNodes.
- Refactor virtual tables to use a class hierarchy instead of namespaces. This is basic thing, not based on the changes done in Vulcan. Window functions is based on this work.
- Refactor COMMENT ON and DROP FUNCTION from DYN to DdlNodes. COMMENT ON do not use GDML anymore, it uses DSQL with PreparedStatement class.
- Refactor EXECUTE BLOCK to StmtNodes.
- Refactor the IUDF to SysFunctions. That eliminates RDB$GET_CONTEXT and RDB$SET_CONTEXT from RDB$FUNCTIONS.
2009-10-21 00:42:38 +00:00

228 lines
6.1 KiB
C++

/*
* 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 <adrianosf@uol.com.br>
* 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;
};
// A queue associated with a Values. Could be used for batching processing.
class ValuesQueue : public Disposable
{
public:
virtual void FB_CALL enqueue(Error* error) = 0; // Enqueue the current Values.
virtual bool FB_CALL dequeue(Error* error) = 0; // Dequeue in Values.
};
// 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;
// Creates a queue associated with this Values.
virtual ValuesQueue* FB_CALL createQueue(Error* error) = 0;
};
} // namespace Firebird
#endif // FIREBIRD_API_H