Initial import
[darksolar] / node_modules / mongoose / lib / drivers / node-mongodb-native / connection.js
1 /**
2  * Module dependencies.
3  */
4
5 var Connection = require('../../connection')
6   , mongo = require('mongodb')
7   , Server = mongo.Server
8   , ReplSetServers = mongo.ReplSetServers;
9
10 /**
11  * Connection for mongodb-native driver
12  *
13  * @api private
14  */
15
16 function NativeConnection() {
17   Connection.apply(this, arguments);
18 };
19
20 /**
21  * Inherits from Connection.
22  */
23
24 NativeConnection.prototype.__proto__ = Connection.prototype;
25
26 /**
27  * Opens the connection.
28  *
29  * Example server options:
30  *   auto_reconnect (default: false)
31  *   poolSize (default: 1)
32  *
33  * Example db options:
34  *   pk - custom primary key factory to generate `_id` values
35  *
36  * Some of these may break Mongoose. Use at your own risk. You have been warned.
37  *
38  * @param {Function} callback
39  * @api private
40  */
41
42 NativeConnection.prototype.doOpen = function (fn) {
43   var server;
44
45   if (!this.db) {
46     server = new mongo.Server(this.host, Number(this.port), this.options.server);
47     this.db = new mongo.Db(this.name, server, this.options.db);
48   }
49
50   this.db.open(fn);
51
52   return this;
53 };
54
55 /**
56  * Opens a set connection
57  *
58  * See description of doOpen for server options. In this case options.replset
59  * is also passed to ReplSetServers. Some additional options there are
60  *
61  *     reconnectWait (default: 1000)
62  *     retries (default: 30)
63  *     rs_name (default: false)
64  *     read_secondary (default: false) Are reads allowed from secondaries?
65  *
66  * @param {Function} fn
67  * @api private
68  */
69
70 NativeConnection.prototype.doOpenSet = function (fn) {
71   if (!this.db) {
72     var servers = []
73       , ports = this.port
74       , self = this
75
76     this.host.forEach(function (host, i) {
77       servers.push(new mongo.Server(host, Number(ports[i]), self.options.server));
78     });
79
80     var server = new ReplSetServers(servers, this.options.replset);
81     this.db = new mongo.Db(this.name, server, this.options.db);
82   }
83
84   this.db.open(fn);
85
86   return this;
87 };
88
89 /**
90  * Closes the connection
91  *
92  * @param {Function} callback
93  * @api private
94  */
95
96 NativeConnection.prototype.doClose = function (fn) {
97   this.db.close();
98   if (fn) fn();
99   return this;
100 }
101
102 /**
103  * Module exports.
104  */
105
106 module.exports = NativeConnection;