text: var common     = require('../../common');
  var connection = common.createConnection();
  var assert     = require('assert');
  
  common.useTestDb(connection);
  
  var table = 'timezone_test';
  connection.query([
    'CREATE TEMPORARY TABLE `' + table + '`(',
    '`offset` varchar(10),',
    '`dt` datetime',
    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
  ].join('\n'));
  
  var tests = [ 0, 1, 5, 12, 26, -1, -5, -20, 'Z', 'local' ];
  
  connection.query('DELETE FROM ' + table);
  
  testNextDate();
  
  function testNextDate() {
  	if (tests.length === 0) {
  		return connection.end();
  	}
  
  	var test = tests.pop();
  
  	testDate(test, function () {
  		testNextDate();
  	});
  }
  
  function testDate(offset, cb) {
  	var dt = new Date();
  
  	if (offset == 'Z' || offset == 'local') {
  		connection._timezone = offset;
  	} else {
  		connection._timezone = (offset < 0 ? "-" : "+") + pad2(Math.abs(offset)) + ":00";
  	}
  	connection.query('INSERT INTO ' + table + ' SET ?', { offset: offset, dt: dt });
  
  	if (offset == 'Z') {
  		dt.setTime(dt.getTime() + (dt.getTimezoneOffset() * 60000));
  	} else if (offset != 'local') {
  		dt.setTime(dt.getTime() + (dt.getTimezoneOffset() * 60000) + (offset * 3600000));
  	}
  
  	connection.query({
  		sql: 'SELECT * FROM ' + table + ' WHERE offset = \'' + offset + '\'',
  		typeCast: function (field, parser, timeZone, next) {
  			if (field.type != 12) return next();
  
  			return new Date(parser.parseLengthCodedString());
  		}
  	}, function (err, result) {
  		if (err) throw err;
  
  		assert.strictEqual(dt.toString(), result[0].dt.toString());
  
  		return cb();
  	});
  }
  
  function pad2(v) {
  	return (v < 10 ? "0" : "") + v;
  }
  