File: mongodb_fm.cpp

package info (click to toggle)
falconpl 0.9.6.9-git20120606-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 46,176 kB
  • sloc: cpp: 181,389; ansic: 109,025; yacc: 2,310; xml: 1,218; sh: 403; objc: 245; makefile: 82; sql: 20
file content (131 lines) | stat: -rw-r--r-- 5,419 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 *  Falcon MongoDB - Module definition
 */

#include "mongodb_ext.h"
#include "mongodb_mod.h"
#include "mongodb_srv.h"
#include "version.h"

#include <falcon/module.h>

/*#
   @module mongodb MongoDB driver module
   @brief Client module for the MongoDB database ( http://www.mongodb.org/ )
   @note This module is, like its underlying driver, in alpha currently.
*/

/*
    TODO LIST...

    - handling error better
    - Optimize BSONIter so that they dont copy data (?)
    - think about what to put in the service
    - JSON interactions
    - work on pure C driver...
 */

Falcon::MongoDBService theMongoDBService;


FALCON_MODULE_DECL
{
    Falcon::Module *self = new Falcon::Module();
    self->name( "mongo" );
    self->engineVersion( FALCON_VERSION_NUM );
    self->version( VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION );

    #include "mongodb_st.h"

    // MongoDB class
    Falcon::Symbol *dbconn_cls = self->addClass( "MongoDB",
                                                 Falcon::Ext::MongoDBConnection_init );
    dbconn_cls->setWKS( true );

    self->addClassMethod( dbconn_cls, "host",
                          Falcon::Ext::MongoDBConnection_host );
    self->addClassMethod( dbconn_cls, "port",
                          Falcon::Ext::MongoDBConnection_port );
    self->addClassMethod( dbconn_cls, "connect",
                          Falcon::Ext::MongoDBConnection_connect );
    self->addClassMethod( dbconn_cls, "disconnect",
                          Falcon::Ext::MongoDBConnection_disconnect );
    self->addClassMethod( dbconn_cls, "isConnected",
                          Falcon::Ext::MongoDBConnection_isConnected );
    self->addClassMethod( dbconn_cls, "authenticate",
                          Falcon::Ext::MongoDBConnection_authenticate );
    self->addClassMethod( dbconn_cls, "addUser",
                          Falcon::Ext::MongoDBConnection_addUser );
    self->addClassMethod( dbconn_cls, "dropDatabase",
                          Falcon::Ext::MongoDBConnection_dropDatabase );
    self->addClassMethod( dbconn_cls, "dropCollection",
                          Falcon::Ext::MongoDBConnection_dropCollection );
    self->addClassMethod( dbconn_cls, "insert",
                          Falcon::Ext::MongoDBConnection_insert );
    self->addClassMethod( dbconn_cls, "update",
                          Falcon::Ext::MongoDBConnection_update );
    self->addClassMethod( dbconn_cls, "remove",
                          Falcon::Ext::MongoDBConnection_remove );
    self->addClassMethod( dbconn_cls, "findOne",
                          Falcon::Ext::MongoDBConnection_findOne );
    self->addClassMethod( dbconn_cls, "find",
                          Falcon::Ext::MongoDBConnection_find );
    self->addClassMethod( dbconn_cls, "count",
                          Falcon::Ext::MongoDBConnection_count );
    self->addClassMethod( dbconn_cls, "command",
                          Falcon::Ext::MongoDBConnection_command );
    self->addClassMethod( dbconn_cls, "createIndex",
                          Falcon::Ext::MongoDBConnection_createIndex );

    // ObjectID class
    Falcon::Symbol *oid_cls = self->addClass( "ObjectID",
                                              Falcon::Ext::MongoOID_init );
    oid_cls->setWKS( true );
    oid_cls->getClassDef()->factory( Falcon::MongoDB::ObjectID::factory );

    self->addClassMethod( oid_cls, "toString",
                          Falcon::Ext::MongoOID_toString );

    // BSON class
    Falcon::Symbol* bson_cls = self->addClass( "BSON",
                                               Falcon::Ext::MongoBSON_init );
    bson_cls->setWKS( true );
    self->addClassMethod( bson_cls, "reset",
                          Falcon::Ext::MongoBSON_reset );
    self->addClassMethod( bson_cls, "genOID",
                          Falcon::Ext::MongoBSON_genOID );
    self->addClassMethod( bson_cls, "append",
                          Falcon::Ext::MongoBSON_append );
    self->addClassMethod( bson_cls, "asDict",
                          Falcon::Ext::MongoBSON_asDict );
    self->addClassMethod( bson_cls, "hasKey",
                          Falcon::Ext::MongoBSON_hasKey );
    self->addClassMethod( bson_cls, "value",
                          Falcon::Ext::MongoBSON_value );

    // BSONIter class
    Falcon::Symbol* bsonit_cls = self->addClass( "BSONIter",
                                                 Falcon::Ext::MongoBSONIter_init );
    bsonit_cls->setWKS( true );
    self->addClassMethod( bsonit_cls, "next",
                          Falcon::Ext::MongoBSONIter_next );
    self->addClassMethod( bsonit_cls, "key",
                          Falcon::Ext::MongoBSONIter_key );
    self->addClassMethod( bsonit_cls, "value",
                          Falcon::Ext::MongoBSONIter_value );
    self->addClassMethod( bsonit_cls, "reset",
                          Falcon::Ext::MongoBSONIter_reset );
    self->addClassMethod( bsonit_cls, "find",
                          Falcon::Ext::MongoBSONIter_find );

    // MongoDBError class
    Falcon::Symbol *error_class = self->addExternalRef( "Error" ); // it's external
    Falcon::Symbol *err_cls = self->addClass( "MongoDBError", &Falcon::Ext::MongoDBError_init );
    err_cls->setWKS( true );
    err_cls->getClassDef()->addInheritance( new Falcon::InheritDef( error_class ) );

    // service publication
    self->publishService( &theMongoDBService );

    return self;
}