Coverage

90%
181
164
17

hive.js

90%
181
164
17
LineHitsSource
1// Generated by CoffeeScript 1.4.0
21var EventEmitter, Stream, each, split, thrift, transport,
3 __slice = [].slice;
4
51Stream = require('stream');
6
71each = require('each');
8
91thrift = require('thrift');
10
111transport = require('thrift/lib/thrift/transport');
12
131EventEmitter = require('events').EventEmitter;
14
151split = module.exports.split = function(hqls) {
165 var commented;
175 if (Array.isArray(hqls)) {
180 return hqls;
19 }
205 commented = false;
215 hqls = hqls.split('\n').filter(function(line) {
2254 var skip;
2354 line = line.trim();
2454 skip = false;
2554 if (!commented && line.indexOf('/*') !== -1) {
261 commented = '/*';
271 skip = true;
2853 } else if (!commented && line === '--') {
291 commented = '--';
301 skip = true;
3152 } else if (commented === '/*' && line.lastIndexOf('*/') !== -1 && line.lastIndexOf('*/') === (line.length - 2)) {
321 commented = false;
331 skip = true;
3451 } else if (commented === '--' && line === '--') {
351 commented = false;
361 skip = true;
37 }
3854 if (line.indexOf('--') === 0) {
3916 skip = true;
40 }
4154 return !commented && !skip;
42 }).join('\n');
435 hqls = hqls.split(';');
445 hqls = hqls.map(function(query) {
4518 return query.trim();
46 });
475 return hqls = hqls.filter(function(query) {
4818 return query.indexOf('--') !== 0 && query !== '';
49 });
50};
51
521module.exports.createClient = function(options) {
534 var client, connection, _ref, _ref1, _ref2, _ref3, _ref4;
544 if (options == null) {
550 options = {};
56 }
574 if ((_ref = options.version) == null) {
580 options.version = '0.7.1-cdh3u3';
59 }
604 if ((_ref1 = options.server) == null) {
610 options.server = '127.0.0.1';
62 }
634 if ((_ref2 = options.port) == null) {
640 options.port = 10000;
65 }
664 if ((_ref3 = options.timeout) == null) {
670 options.timeout = 1000;
68 }
694 if ((_ref4 = options.transport) == null) {
701 options.transport = transport.TBufferedTransport;
71 }
724 connection = thrift.createConnection(options.server, options.port, options);
734 client = thrift.createClient(require("./" + options.version + "/ThriftHive"), connection);
744 return {
75 connection: connection,
76 client: client,
77 end: connection.end.bind(connection),
78 execute: function(query, callback) {
7914 var emitter;
8014 emitter = new EventEmitter;
8114 process.nextTick(function() {
8214 emitter.emit('before', query);
8314 return client.execute(query, function(err) {
8414 var emitError, lboth, lerror;
8514 if (err) {
862 emitter.readable = false;
872 lerror = emitter.listeners('error').length;
882 lboth = emitter.listeners('both').length;
892 emitError = lerror || (!lerror && !lboth && !callback);
902 if (emitError) {
911 emitter.emit('error', err);
92 }
93 } else {
9412 emitter.emit('end', null, query);
95 }
9614 emitter.emit('both', err, query);
9714 if (callback) {
989 return callback(err, callback);
99 }
100 });
101 });
10214 return emitter;
103 },
104 query: function(query, size) {
1058 var buffer, callback, count, emitter, exec, fetch, handle,
106 _this = this;
1078 if (arguments.length === 2 && typeof size === 'function') {
1080 callback = size;
1090 size = null;
110 }
1118 exec = function() {
1127 emitter.emit('before', query);
1137 return client.execute(query, function(err) {
1147 var emitError, lboth, lerror;
1157 if (err) {
1161 emitter.readable = false;
1171 lerror = emitter.listeners('error').length;
1181 lboth = emitter.listeners('both').length;
1191 emitError = lerror || (!lerror && !lboth);
1201 if (emitError) {
1211 emitter.emit('error', err);
122 }
1231 emitter.emit('both', err, query);
1241 return;
125 }
1266 return fetch();
127 });
128 };
1298 if (query) {
1305 process.nextTick(exec);
131 }
1328 buffer = [];
1338 count = 0;
1348 emitter = new Stream;
1358 emitter.size = size;
1368 emitter.readable = true;
1378 emitter.paused = 0;
1388 emitter.query = function(q) {
1392 if (query) {
1400 throw new Error('Query already defined');
141 }
1422 query = q;
1432 exec();
1442 return this;
145 };
1468 emitter.pause = function() {
14754 return this.paused = 1;
148 };
1498 emitter.resume = function() {
15054 this.was = this.paused;
15154 this.paused = 0;
15254 if (this.was) {
1536 return fetch();
154 }
155 };
1568 handle = function(err, rows) {
15721 var emitError, lboth, lerror, row, _i, _len;
15821 if (err) {
1590 emitter.readable = false;
1600 lerror = emitter.listeners('error').length;
1610 lboth = emitter.listeners('both').length;
1620 emitError = lerror || (!lerror && !lboth);
1630 if (emitError) {
1640 emitter.emit('error', err);
165 }
1660 emitter.emit('both', err, query);
1670 return;
168 }
16921 rows = rows.map(function(row) {
170273 return row.split('\t');
171 });
17221 for (_i = 0, _len = rows.length; _i < _len; _i++) {
173273 row = rows[_i];
174273 if (count === 0) {
1756 emitter.emit('row-first', row, 0);
176 }
177273 emitter.emit('row', row, count++);
178 }
17921 if (rows.length === emitter.size) {
18015 if (!emitter.paused) {
18110 return fetch();
182 }
183 } else {
1846 emitter.emit('row-last', row, count - 1);
1856 emitter.readable = false;
1866 emitter.emit('end', query);
1876 return emitter.emit('both', null, query);
188 }
189 };
1908 fetch = function() {
19122 if (emitter.paused || !emitter.readable) {
1921 return;
193 }
19421 if (emitter.size) {
19518 return client.fetchN(emitter.size, handle);
196 } else {
1973 return client.fetchAll(handle);
198 }
199 };
2008 return emitter;
201 },
202 multi_execute: function(hqls, callback) {
2032 var emitter,
204 _this = this;
2052 emitter = new EventEmitter;
2062 hqls = split(hqls);
2072 each(hqls).on('item', function(next, query) {
2084 var exec;
2094 exec = _this.execute(query, next);
2104 return exec.on('before', function() {
2114 var _ref5;
2124 return (_ref5 = emitter.emit).call.apply(_ref5, [emitter, 'before'].concat(__slice.call(arguments)));
213 });
214 }).on('both', function(err) {
2152 var _ref5, _ref6, _ref7;
2162 if (err) {
2171 (_ref5 = emitter.emit).call.apply(_ref5, [emitter, 'error'].concat(__slice.call(arguments)));
218 } else {
2191 (_ref6 = emitter.emit).call.apply(_ref6, [emitter, 'end'].concat(__slice.call(arguments)));
220 }
2212 (_ref7 = emitter.emit).call.apply(_ref7, [emitter, 'both'].concat(__slice.call(arguments)));
2222 if (callback) {
2232 return callback(err);
224 }
225 });
2262 return emitter;
227 },
228 multi_query: function(hqls, size) {
2293 var query,
230 _this = this;
2313 hqls = split(hqls);
2323 query = this.query();
2333 each(hqls).on('item', function(next, hql, i) {
2347 var exec;
2357 if (hqls.length !== i + 1) {
2365 exec = _this.execute(hql);
2375 exec.on('before', function() {
2385 var _ref5;
2395 return (_ref5 = query.emit).call.apply(_ref5, [query, 'before'].concat(__slice.call(arguments)));
240 });
2415 exec.on('error', function(err) {
2421 var emitError, lboth, lerror;
2431 query.readable = false;
2441 lerror = query.listeners('error').length;
2451 lboth = query.listeners('both').length;
2461 emitError = lerror || (!lerror && !lboth);
2471 if (emitError) {
2481 query.emit('error', err);
249 }
2501 return query.emit('both', err, query);
251 });
2525 return exec.on('end', function() {
2534 return next();
254 });
255 } else {
2562 return query.query(hql, size);
257 }
258 });
2593 return query;
260 }
261 };
262};