test-binary-notnull-nulls.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. var assert = require('assert');
  2. var FieldFlags = require('../../../lib/constants/field_flags.js');
  3. var common = require('../../common');
  4. var conn = common.createConnection();
  5. // it's possible to receive null values for columns marked with NOT_NULL flag
  6. // see https://github.com/sidorares/node-mysql2/issues/178 for info
  7. conn.query('CREATE TEMPORARY TABLE `tmp_account` ( ' +
  8. ' `id` int(11) NOT NULL AUTO_INCREMENT, ' +
  9. ' `username` varchar(64) NOT NULL, ' +
  10. ' `auth_code` varchar(30) NOT NULL, ' +
  11. ' `access_token` varchar(30) NOT NULL, ' +
  12. ' `refresh_token` tinytext NOT NULL, ' +
  13. ' PRIMARY KEY (`id`) ' +
  14. ' ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8');
  15. conn.query("INSERT INTO `tmp_account` VALUES ('1', 'xgredx', '', '', '')");
  16. conn.query('CREATE TEMPORARY TABLE `tmp_account_flags` ( ' +
  17. ' `account` int(11) NOT NULL, ' +
  18. ' `flag` tinyint(3) NOT NULL, ' +
  19. ' PRIMARY KEY (`account`,`flag`) ' +
  20. ' ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8');
  21. conn.query("INSERT INTO `tmp_account_flags` VALUES ('1', '100')")
  22. conn.query('CREATE TEMPORARY TABLE `tmp_account_session` ( ' +
  23. ' `account` int(11) NOT NULL, ' +
  24. ' `ip` varchar(15) NOT NULL, ' +
  25. ' `session` varchar(114) NOT NULL, ' +
  26. ' `time` int(11) NOT NULL, ' +
  27. ' PRIMARY KEY (`account`,`ip`) ' +
  28. ' ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8');
  29. conn.query("INSERT INTO `tmp_account_session` VALUES ('1', '::1', '75efb145482ce22f4544390cad233c749c1b43e4', '1')")
  30. conn.connect(function(err) {
  31. if (err) {
  32. console.error(err);
  33. return;
  34. }
  35. conn.execute("SELECT `ac`.`username`, CONCAT('[', GROUP_CONCAT(DISTINCT `acf`.`flag` SEPARATOR ','), ']') flags FROM tmp_account ac LEFT JOIN tmp_account_flags acf ON `acf`.account = `ac`.id LEFT JOIN tmp_account_session acs ON `acs`.account = `ac`.id WHERE `acs`.`session`=?", ["asid=75efb145482ce22f4544390cad233c749c1b43e4"], function(err, rows, fields) {
  36. var flagNotNull = fields[0].flags & FieldFlags.NOT_NULL;
  37. var valueIsNull = rows[0][fields[0].name] === null;
  38. assert( flagNotNull && valueIsNull );
  39. conn.end();
  40. });
  41. });