3 new revisions:

Revision: 974a3f8382e8
Author:   gdusbabek <gdusba...@gmail.com>
Date:     Wed Jan 11 09:01:40 2012
Log:      detect select count(*) and decode appropriately.
http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=974a3f8382e8

Revision: 474e16d83307
Author:   Gary Dusbabek <gdusba...@gmail.com>
Date:     Wed Jan 11 08:05:25 2012
Log:      export bufferToHex and tests to show that binary cols/keys work
http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=474e16d83307

Revision: 252c01c314aa
Author:   Gary Dusbabek <gdusba...@gmail.com>
Date:     Wed Jan 11 09:03:09 2012
Log:      Merge branch '25/select_count'
http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=252c01c314aa

==============================================================================
Revision: 974a3f8382e8
Author:   gdusbabek <gdusba...@gmail.com>
Date:     Wed Jan 11 09:01:40 2012
Log:      detect select count(*) and decode appropriately.

http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=974a3f8382e8

Modified:
 /lib/decoder.js
 /lib/driver.js
 /test/test_driver.js

=======================================
--- /lib/decoder.js     Tue Jan 10 11:15:10 2012
+++ /lib/decoder.js     Wed Jan 11 09:01:40 2012
@@ -129,6 +129,9 @@
   },
   'org.apache.cassandra.db.marshal.LexicalUUIDType': function(bytes) {
     return converters['org.apache.cassandra.db.marshal.UUIDType'](bytes);
+  },
+  'select count': function(bytes) {
+    return converters['org.apache.cassandra.db.marshal.LongType'](bytes);
   }
 };

@@ -162,7 +165,9 @@
   } else if (which == 'comparator') {
     className = this.validators.comparator;
   } else if (which == 'validator') {
-    if (column && this.validators.specificValidators[column]) {
+    if (this.options.select_count) {
+      className = 'select count';
+    } else if (column && this.validators.specificValidators[column]) {
       className = this.validators.specificValidators[column];
     } else {
       className = this.validators.defaultValidator;
=======================================
--- /lib/driver.js      Mon Jan  9 03:12:55 2012
+++ /lib/driver.js      Wed Jan 11 09:01:40 2012
@@ -37,6 +37,7 @@

 // used to parse the CF name out of a select statement.
 var selectRe = /\s*SELECT\s+.+\s+FROM\s+[\']?(\w+)/im;
+var selectCountRe = /\s*SELECT\s+.*COUNT\(.+\)\s+FROM\s+[\']?(\w+)/im;

var appExceptions = ['InvalidRequestException', 'TimedOutException', 'UnavailableException',
   'SchemaDisagreementException'];
@@ -559,7 +560,8 @@
       } else {
         if (res.type === ttypes.CqlResultType.ROWS) {
           var cfName = selectRe.exec(cql)[1];
- var decoder = new Decoder(self.validators[cfName], {use_bigints: self.connectionInfo.use_bigints}); + var decoder = new Decoder(self.validators[cfName], {use_bigints: self.connectionInfo.use_bigints, + select_count: selectCountRe.test(cql)});
           // for now, return results.
           var rows = [];
           for (var i = 0; i < res.rows.length; i++) {
=======================================
--- /test/test_driver.js        Mon Jan  9 12:44:46 2012
+++ /test/test_driver.js        Wed Jan 11 09:01:40 2012
@@ -207,7 +207,8 @@
     function executeCountQuery(callback) {
       con.execute('SELECT COUNT(*) FROM CfLong', [], function(err, rows) {
         assert.ifError(err);
-        assert.equal(rows[0].cols[0].value, 5);
+        console.log(rows[0].cols);
+        assert.strictEqual(rows[0].cols[0].value, 5);
         callback();
       });
     },

==============================================================================
Revision: 474e16d83307
Author:   Gary Dusbabek <gdusba...@gmail.com>
Date:     Wed Jan 11 08:05:25 2012
Log:      export bufferToHex and tests to show that binary cols/keys work

http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=474e16d83307

Added:
 /test/util.js
Modified:
 /lib/decoder.js
 /test/test_decoder.js
 /test/test_driver.js

=======================================
--- /dev/null
+++ /test/util.js       Wed Jan 11 08:05:25 2012
@@ -0,0 +1,23 @@
+
+// min is inclusive, max is exclusive.
+function randomInt(min, max) {
+  if (min === undefined) {
+    min = -2147483648;
+  }
+  if (max === undefined) {
+    max = 2147483647
+  }
+  return Math.round(Math.random() * (max - min) + min);
+}
+
+function randomBuffer(sz) {
+  sz = sz || randomInt(10, 100);
+  var buf = new Buffer(sz);
+  for (var i = 0; i < sz; i++) {
+    buf[i] = randomInt(0, 255);
+  }
+  return buf;
+}
+
+exports.randomInt = randomInt;
+exports.randomBuffer = randomBuffer;
=======================================
--- /lib/decoder.js     Tue Jan 10 11:15:10 2012
+++ /lib/decoder.js     Wed Jan 11 08:05:25 2012
@@ -63,6 +63,24 @@
   return bytesToBigInt(bytes);
 };

+// just what you think.
+function byteToHex(n) {
+  if (n < 16) {
+    return '0' + n.toString(16);
+  } else {
+    return n.toString(16);
+  }
+}
+
+/** convert a buffer to a hex string suitable for use in cql statements. */
+var bufferToString = module.exports.bufferToString = function(buf) {
+  var chars = [];
+  for (var i = 0; i < buf.length; i++) {
+    chars[i] = byteToHex(buf[i]);
+  }
+  return chars.join('');
+};
+
 // Cassandra datatypes according to
 // http://www.datastax.com/docs/1.0/ddl/column_family
 // Those commented out are not correctly dealt with yet and will appear as
=======================================
--- /test/test_decoder.js       Mon Jan  9 10:46:41 2012
+++ /test/test_decoder.js       Wed Jan 11 08:05:25 2012
@@ -19,6 +19,7 @@
 var BigInteger = require('../lib/bigint').BigInteger;
 var bytesToBigLong = require('../lib/decoder').bytesToBigLong;
 var bytesToNum = require('../lib/decoder').bytesToNum;
+var bufferToString = require('../lib/decoder').bufferToString;
 var UUID = require('../lib/uuid');

 function makeBuffer(string) {
@@ -242,3 +243,15 @@
   }
   test.finish();
 };
+
+exports.testHexing = function(test, assert) {
+  var buf = new Buffer(6);
+  buf[0] = 0x00;
+  buf[1] = 0x33;
+  buf[2] = 0x66;
+  buf[3] = 0x99;
+  buf[4] = 0xcc;
+  buf[5] = 0xff;
+  assert.strictEqual('00336699ccff', bufferToString(buf));
+  test.finish();
+};
=======================================
--- /test/test_driver.js        Mon Jan  9 12:44:46 2012
+++ /test/test_driver.js        Wed Jan 11 08:05:25 2012
@@ -34,6 +34,8 @@
 var KsDef = require('../lib/system').KsDef;
 var CfDef = require('../lib/system').CfDef;
 var UUID = require('../lib/driver').UUID;
+var util = require('./util');
+var decoder = require('../lib/decoder');

 var CASSANDRA_PORT = 19170;

@@ -429,6 +431,33 @@
   });
 };

+exports.testBinary = function(test, assert) {
+  connect(function(err, con) {
+    assert.ifError(err);
+    var key = 'binarytest';
+ var binaryParams = [util.randomBuffer(), util.randomBuffer(), util.randomBuffer()];
+    var stringParams = binaryParams.map(decoder.bufferToString);
+ con.execute('update CfBytes set ?=? where key=?', stringParams, function(updErr) {
+      if (updErr) {
+        con.close();
+        assert.ok(false);
+        test.finish();
+      } else {
+ con.execute('select ? from CfBytes where key=?', [stringParams[0], stringParams[2]], function(selErr, rows) {
+          con.close();
+          assert.strictEqual(rows.rowCount(), 1);
+          var row = rows[0];
+          console.log(row);
+ assert.strictEqual(row.key.toString('base64'), binaryParams[2].toString('base64')); + assert.strictEqual(row.cols[0].name.toString('base64'), binaryParams[0].toString('base64')); + assert.strictEqual(row.cols[0].value.toString('base64'), binaryParams[1].toString('base64'));
+          test.finish();
+        });
+      }
+    });
+  });
+};
+
 exports.testLong = function(test, assert) {
   connect(function(err, con) {
     if (err) {

==============================================================================
Revision: 252c01c314aa
Author:   Gary Dusbabek <gdusba...@gmail.com>
Date:     Wed Jan 11 09:03:09 2012
Log:      Merge branch '25/select_count'

http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=252c01c314aa

Modified:
 /lib/decoder.js
 /test/test_driver.js

=======================================
--- /lib/decoder.js     Wed Jan 11 08:05:25 2012
+++ /lib/decoder.js     Wed Jan 11 09:03:09 2012
@@ -147,6 +147,9 @@
   },
   'org.apache.cassandra.db.marshal.LexicalUUIDType': function(bytes) {
     return converters['org.apache.cassandra.db.marshal.UUIDType'](bytes);
+  },
+  'select count': function(bytes) {
+    return converters['org.apache.cassandra.db.marshal.LongType'](bytes);
   }
 };

@@ -180,7 +183,9 @@
   } else if (which == 'comparator') {
     className = this.validators.comparator;
   } else if (which == 'validator') {
-    if (column && this.validators.specificValidators[column]) {
+    if (this.options.select_count) {
+      className = 'select count';
+    } else if (column && this.validators.specificValidators[column]) {
       className = this.validators.specificValidators[column];
     } else {
       className = this.validators.defaultValidator;
=======================================
--- /test/test_driver.js        Wed Jan 11 08:05:25 2012
+++ /test/test_driver.js        Wed Jan 11 09:03:09 2012
@@ -209,7 +209,8 @@
     function executeCountQuery(callback) {
       con.execute('SELECT COUNT(*) FROM CfLong', [], function(err, rows) {
         assert.ifError(err);
-        assert.equal(rows[0].cols[0].value, 5);
+        console.log(rows[0].cols);
+        assert.strictEqual(rows[0].cols[0].value, 5);
         callback();
       });
     },

Reply via email to