test-load-infile.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. var common = require('../../common');
  2. var connection = common.createConnection();
  3. var assert = require('assert');
  4. var table = 'load_data_test';
  5. connection.query([
  6. 'CREATE TEMPORARY TABLE `' + table + '` (',
  7. '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
  8. '`title` varchar(255),',
  9. 'PRIMARY KEY (`id`)',
  10. ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
  11. ].join('\n'));
  12. var path = './test/fixtures/data.csv';
  13. var sql =
  14. 'LOAD DATA LOCAL INFILE ? INTO TABLE ' + table + ' ' +
  15. 'FIELDS TERMINATED BY ? (id, title)';
  16. var ok;
  17. connection.query(sql, [path, ','], function(err, _ok) {
  18. if (err) throw err;
  19. ok = _ok;
  20. });
  21. var rows;
  22. connection.query('SELECT * FROM ' + table, function(err, _rows) {
  23. if (err) throw err;
  24. rows = _rows;
  25. });
  26. // Try to load a file that does not exist to see if we handle this properly
  27. var loadErr;
  28. var loadResult;
  29. var badPath = '/does_not_exist.csv';
  30. connection.query(sql, [badPath, ','], function(err, result) {
  31. loadErr = err;
  32. loadResult = result;
  33. });
  34. // test path mapping
  35. var Stream = require('readable-stream').PassThrough;
  36. var myStream = new Stream();
  37. var createMyStream = function(path) { return myStream; };
  38. var streamResult;
  39. connection.query({
  40. sql: sql,
  41. values: [badPath, ','],
  42. infileStreamFactory: createMyStream
  43. }, function(err, result) {
  44. if (err) throw err;
  45. streamResult = result;
  46. }
  47. );
  48. myStream.write('11,Hello World\n');
  49. myStream.write('21,One ');
  50. myStream.write('more row\n');
  51. myStream.end();
  52. connection.end();
  53. process.on('exit', function() {
  54. assert.equal(ok.affectedRows, 4);
  55. assert.equal(rows.length, 4);
  56. assert.equal(rows[0].id, 1);
  57. assert.equal(rows[0].title, 'Hello World');
  58. assert.equal(loadErr.code, 'ENOENT');
  59. assert.equal(loadResult.affectedRows, 0);
  60. assert.equal(streamResult.affectedRows, 2);
  61. });