1 message in com.mysql.lists.ndb-connectorsRev 125: Added preliminary underlying...| From | Sent On | Attachments |
|---|---|---|
| Monty Taylor | 25 Jun 2007 09:54 |
| Subject: | Rev 125: Added preliminary underlying support for NdbEventOperation. in http://bazaar.launchpad.net/~ndb-connectors/ndb-connectors/ndbjmerge![]() |
|---|---|
| From: | Monty Taylor (mtay...@mysql.com) |
| Date: | 06/25/2007 09:54:15 AM |
| List: | com.mysql.lists.ndb-connectors |
------------------------------------------------------------
revno: 125
revision-id: mtay...@mysql.com-20070625165409-i0cg27v5lk71f1yx
parent: mtay...@mysql.com-20070529154711-e5o81940jci5wo7z
committer: Monty Taylor <mtay...@mysql.com>
branch nick: ndbjmerge
timestamp: Mon 2007-06-25 09:54:09 -0700
message:
Added preliminary underlying support for NdbEventOperation.
added:
swig/NdbEventOperation.i
ndbeventoperation.i-20070625162920-mfe5hei0d2x85mrk-1
modified:
java/ndbapi.i ndbapi.i-20070130002924-gcvhapmvh0lu1pkd-3
ruby/test.rb test.rb-20070228212451-7arjxk90dkwcn5xr-4
swig/NdbDictionary.i
ndbdictionary.i-20070323110251-l7mg72hiddtuzeh0-1
swig/ndbglobals.i globals.i-20070228021421-qkr4cbpxymyqdrf3-7
=== added file 'swig/NdbEventOperation.i'
--- a/swig/NdbEventOperation.i 1970-01-01 00:00:00 +0000
+++ b/swig/NdbEventOperation.i 2007-06-25 16:54:09 +0000
@@ -0,0 +1,121 @@
+// -*- mode: c++ -*-
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+class NdbEventOperation {
+public:
+ /**
+ * State of the NdbEventOperation object
+ */
+ enum State {
+ EO_CREATED, ///< Created but execute() not called
+ EO_EXECUTING, ///< execute() called
+ EO_DROPPED, ///< Waiting to be deleted, Object unusable.
+ EO_ERROR ///< An error has occurred. Object unusable.
+ };
+ /**
+ * Retrieve current state of the NdbEventOperation object
+ */
+ State getState();
+ /**
+ * See NdbDictionary::Event. Default is false.
+ */
+ void mergeEvents(bool flag);
+
+ /**
+ * Activates the NdbEventOperation to start receiving events. The
+ * changed attribute values may be retrieved after Ndb::nextEvent()
+ * has returned not NULL. The getValue() methods must be called
+ * prior to execute().
+ *
+ * @return 0 if successful otherwise -1.
+ */
+ int execute();
+
+
+ NdbRecAttr *getValue(const char *anAttrName, char *aValue = 0);
+ /**
+ * See getValue().
+ */
+ NdbRecAttr *getPreValue(const char *anAttrName, char *aValue = 0);
+ NdbBlob* getBlobHandle(const char *anAttrName);
+ NdbBlob* getPreBlobHandle(const char *anAttrName);
+
+ int isOverrun() const;
+ bool isConsistent() const;
+
+ /**
+ * Query for occured event type.
+ *
+ * @note Only valid after Ndb::nextEvent() has been called and
+ * returned a not NULL value
+ *
+ * @return type of event
+ */
+ NdbDictEvent::TableEvent getEventType() const;
+ /**
+ * Check if table name has changed, for event TE_ALTER
+ */
+ const bool tableNameChanged() const;
+
+ /**
+ * Check if table frm has changed, for event TE_ALTER
+ */
+ const bool tableFrmChanged() const;
+
+ /**
+ * Check if table fragmentation has changed, for event TE_ALTER
+ */
+ const bool tableFragmentationChanged() const;
+
+ /**
+ * Check if table range partition list name has changed, for event TE_ALTER
+ */
+ const bool tableRangeListChanged() const;
+ /**
+ * Retrieve the GCI of the latest retrieved event
+ *
+ * @return GCI number
+ */
+ Uint64 getGCI() const;
+
+ /**
+ * Retrieve the AnyValue of the latest retrieved event
+ *
+ * @return AnyValue
+ */
+ Uint32 getAnyValue() const;
+ /**
+ * Retrieve the complete GCI in the cluster (not necessarily
+ * associated with an event)
+ *
+ * @return GCI number
+ */
+ Uint64 getLatestGCI() const;
+
+ /**
+ * Get the latest error
+ *
+ * @return Error object.
+ */
+ const struct NdbError & getNdbError() const;
+
+private:
+ NdbEventOperation(Ndb *theNdb, const char* eventName);
+ ~NdbEventOperation();
+};
+
+typedef void (* NdbEventCallback)(NdbEventOperation*, Ndb*, void*);
+
=== modified file 'java/ndbapi.i' --- a/java/ndbapi.i 2007-05-29 15:45:11 +0000 +++ b/java/ndbapi.i 2007-06-25 16:54:09 +0000 @@ -86,7 +86,7 @@ %typemap(jstype) asynch_callback_t * "INdbCallable" %typemap(javain) asynch_callback_t * "(Object)$javainput"
-%typemap(javaimports) NdbFactory, Ndb, Ndb_cluster_connection, NdbTransaction,
NdbOperation, NdbIndexOperation, NdbScanOperation, NdbIndexScanOperation,
NdbBlob, NdbDictDictionary, NdbDictColumn, NdbDictIndex, NdbDictTable,
NdbDictObject, NdbScanFilter "import com.mysql.cluster.errors.*;"
+%typemap(javaimports) NdbFactory, Ndb, Ndb_cluster_connection, NdbTransaction,
NdbOperation, NdbIndexOperation, NdbScanOperation, NdbIndexScanOperation,
NdbBlob, NdbDictDictionary, NdbDictColumn, NdbDictIndex, NdbDictTable,
NdbDictObject, NdbScanFilter, NdbEvent, NdbEventOperation "import
com.mysql.cluster.errors.*;"
%pragma(java) moduleimports="import com.mysql.cluster.errors.*;"
%pragma(java) jniclassimports="import com.mysql.cluster.errors.*;"
@@ -270,6 +270,7 @@ %include "NdbScanOperation.i" %include "NdbIndexOperation.i" %include "NdbIndexScanOperation.i" +%include "NdbEventOperation.i" %include "NdbRecAttr.i" %include "NdbBlob.i" %include "NdbError.i"
=== modified file 'ruby/test.rb' --- a/ruby/test.rb 2007-05-29 15:45:11 +0000 +++ b/ruby/test.rb 2007-06-25 16:54:09 +0000 @@ -14,7 +14,7 @@ begin connection.connect(1,1,1) connection.wait_until_ready(30, 30) - + rescue Ndbapi::NdbApiException => e puts "ERROR:" + e exit
=== modified file 'swig/NdbDictionary.i' --- a/swig/NdbDictionary.i 2007-05-29 15:45:11 +0000 +++ b/swig/NdbDictionary.i 2007-06-25 16:54:09 +0000 @@ -128,7 +128,7 @@ bool getNullable() const; bool getPrimaryKey() const; int getColumnNo() const; - bool equal(const NdbDictionary::Column& column) const; + bool equal(const NdbDictColumn& column) const; Type getType() const; int getPrecision() const; int getScale() const; @@ -392,3 +392,185 @@ ~NdbDictDictionary(); };
+ +class NdbDictEvent : public NdbDictObject { + +public: + enum TableEvent { + TE_INSERT =1<<0, ///< Insert event on table + TE_DELETE =1<<1, ///< Delete event on table + TE_UPDATE =1<<2, ///< Update event on table + TE_DROP =1<<4, ///< Drop of table + TE_ALTER =1<<5, ///< Alter of table + TE_CREATE =1<<6, ///< Create of table + TE_GCP_COMPLETE=1<<7, ///< GCP is complete + TE_CLUSTER_FAILURE=1<<8, ///< Cluster is unavailable + TE_STOP =1<<9, ///< Stop of event operation + TE_NODE_FAILURE=1<<10, ///< Node failed + TE_SUBSCRIBE =1<<11, ///< Node subscribes + TE_UNSUBSCRIBE =1<<12, ///< Node unsubscribes + TE_ALL=0xFFFF ///< Any/all event on table (not relevant when + ///< events are received) + }; + + enum EventDurability { + ED_UNDEFINED = 0, + ED_PERMANENT = 3, + }; + + /** + * Specifies reporting options for table events + */ + enum EventReport { + ER_UPDATED = 0, + ER_ALL = 1, // except not-updated blob inlines + ER_SUBSCRIBE = 2 + }; + + /** + * Constructor + * @param name Name of event + */ + NdbDictEvent(const char *name); + /** + * Constructor + * @param name Name of event + * @param table Reference retrieved from NdbDictionary + */ + NdbDictEvent(const char *name, const NdbDictTable& table); + virtual ~Event(); + /** + * Set unique identifier for the event + */ + int setName(const char *name); + /** + * Get unique identifier for the event + */ + const char *getName() const; + /** + * Get table that the event is defined on + * + * @return pointer to table or NULL if no table has been defined + */ + const NdbDictTable * getTable() const; + /** + * Define table on which events should be detected + * + * @note calling this method will default to detection + * of events on all columns. Calling subsequent + * addEventColumn calls will override this. + * + * @param table reference retrieved from NdbDictionary + */ + void setTable(const NdbDictTable& table); + /** + * Set table for which events should be detected + * + * @note preferred way is using setTable(const NdbDictionary::Table&) + * or constructor with table object parameter + */ + int setTable(const char *tableName); + /** + * Get table name for events + * + * @return table name + */ + const char* getTableName() const; + /** + * Add type of event that should be detected + */ + void addTableEvent(const TableEvent te); + /** + * Check if a specific table event will be detected + */ + bool getTableEvent(const TableEvent te) const; + /** + * Set durability of the event + */ + void setDurability(EventDurability); + /** + * Get durability of the event + */ + EventDurability getDurability() const; + /** + * Set report option of the event + */ + void setReport(EventReport); + /** + * Get report option of the event + */ + EventReport getReport() const; + + /** + * Add a column on which events should be detected + * + * @param attrId Column id + * + * @note errors will mot be detected until createEvent() is called + */ + void addEventColumn(unsigned attrId); + /** + * Add a column on which events should be detected + * + * @param columnName Column name + * + * @note errors will not be detected until createEvent() is called + */ + void addEventColumn(const char * columnName); + /** + * Add several columns on which events should be detected + * + * @param n Number of columns + * @param columnNames Column names + * + * @note errors will mot be detected until + * NdbDictionary::Dictionary::createEvent() is called + */ + void addEventColumns(int n, const char ** columnNames); + /** + * Get no of columns defined in an Event + * + * @return Number of columns, -1 on error + */ + int getNoOfEventColumns() const; + + /** + * Get a specific column in the event + */ + const NdbDictColumn * getEventColumn(unsigned no) const; + + /** + * The merge events flag is false by default. Setting it true + * implies that events are merged in following ways: + * + * - for given NdbEventOperation associated with this event, + * events on same PK within same GCI are merged into single event + * + * - a blob table event is created for each blob attribute + * and blob events are handled as part of main table events + * + * - blob post/pre data from the blob part events can be read + * via NdbBlob methods as a single value + * + * NOTE: Currently this flag is not inherited by NdbEventOperation + * and must be set on NdbEventOperation explicitly. + */ + void mergeEvents(bool flag); + + /** + * Get object status + */ + virtual NdbDictObject::Status getObjectStatus() const; + + /** + * Get object version + */ + virtual int getObjectVersion() const; + + /** + * Get object id + */ + virtual int getObjectId() const; + private: + Event(NdbEventImpl&); +};
=== modified file 'swig/ndbglobals.i' --- a/swig/ndbglobals.i 2007-05-29 15:45:11 +0000 +++ b/swig/ndbglobals.i 2007-06-25 16:54:09 +0000 @@ -50,17 +50,19 @@ typedef NdbDictionary::Column NdbDictColumn; typedef NdbDictionary::Index NdbDictIndex; typedef NdbDictionary::Dictionary NdbDictDictionary; - +typedef NdbDictionary::Event NdbDictEvent;
%}
- +// TODO: This is a little stupid. +// Why don't we just typedef these right in the first place %rename(NdbObject) NdbDictObject; %rename(NdbTable) NdbDictTable; %rename(NdbColumn) NdbDictColumn; %rename(NdbIndex) NdbDictIndex; %rename(NdbDictionary) NdbDictDictionary; +%rename(NdbEvent) NdbDictEvent;
enum AbortOption {




