-
Notifications
You must be signed in to change notification settings - Fork 129
/
connection.js
148 lines (131 loc) · 3.26 KB
/
connection.js
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
* Copyright (c) 2015-2018 Snowflake Computing Inc. All rights reserved.
*/
const uuidv4 = require('uuid/v4');
var Util = require('../util');
var Errors = require('../errors');
var ErrorCodes = Errors.codes;
var EventEmitter = require('events').EventEmitter;
var Statement = require('./statement');
/**
* Creates a new Connection instance.
*
* @param {ConnectionContext} context
*
* @returns {Object}
*/
function Connection(context)
{
// validate input
Errors.assertInternal(Util.isObject(context));
var services = context.getServices();
var connectionConfig = context.getConnectionConfig();
// generate an id for the connection
var id = uuidv4();
/**
* Returns the connection id.
*
* @returns {String}
*/
this.getId = function()
{
return id;
};
/**
* Establishes a connection if we aren't in a fatal state.
*
* @param {Function} callback
*
* @returns {Object} the connection object.
*/
this.connect = function(callback)
{
// invalid callback
Errors.checkArgumentValid(
!Util.exists(callback) || Util.isFunction(callback),
ErrorCodes.ERR_CONN_CONNECT_INVALID_CALLBACK);
// connect to the snowflake service and provide our own callback so that
// the connection can be passed in when invoking the connection.connect()
// callback
var self = this;
services.sf.connect(
{
callback: function(err)
{
if (Util.isFunction(callback))
{
callback(Errors.externalize(err), self);
}
}
});
// return the connection to facilitate chaining
return this;
};
/**
* Executes a statement.
*
* @param {Object} options
*
* @returns {Object}
*/
this.execute = function(options)
{
return Statement.createRowStatementPreExec(
options, services, connectionConfig);
};
/**
* Fetches the result of a previously issued statement.
*
* @param {Object} options
*
* @returns {Object}
*/
this.fetchResult = function(options)
{
return Statement.createRowStatementPostExec(
options, services, connectionConfig);
};
/**
* Immediately terminates the connection without waiting for currently
* executing statements to complete.
*
* @param {Function} callback
*
* @returns {Object} the connection object.
*/
this.destroy = function(callback)
{
// invalid callback
Errors.checkArgumentValid(
!Util.exists(callback) || Util.isFunction(callback),
ErrorCodes.ERR_CONN_DESTROY_INVALID_CALLBACK);
// log out of the snowflake service and provide our own callback so that
// the connection can be passed in when invoking the connection.destroy()
// callback
var self = this;
services.sf.destroy(
{
callback: function(err)
{
if (Util.isFunction(callback))
{
callback(Errors.externalize(err), self);
}
}
});
// return the connection to facilitate chaining
return this;
};
/**
* Returns a serialized version of this connection.
*
* @returns {String}
*/
this.serialize = function()
{
return JSON.stringify(context.getConfig());
};
EventEmitter.call(this);
}
Util.inherits(Connection, EventEmitter);
module.exports = Connection;