test.js 4.7 KB
Newer Older
S
StoneT2000 已提交
1
const taos = require('../tdengine');
2
var conn = taos.connect({host:"127.0.0.1", user:"root", password:"taosdata", config:"/etc/taos",port:10});
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
var c1 = conn.cursor();
let stime = new Date();
let interval = 1000;

function convertDateToTS(date) {
  let tsArr = date.toISOString().split("T")
  return "\"" + tsArr[0] + " " + tsArr[1].substring(0, tsArr[1].length-1) + "\"";
}
function R(l,r) {
  return Math.random() * (r - l) - r;
}
function randomBool() {
  if (Math.random() <  0.5) {
    return true;
  }
  return false;
}
S
StoneT2000 已提交
20 21 22 23

// Initialize

c1.execute('create database if not exists td_connector_test;');
24 25
c1.execute('use td_connector_test;')
c1.execute('create table if not exists all_types (ts timestamp, _int int, _bigint bigint, _float float, _double double, _binary binary(40), _smallint smallint, _tinyint tinyint, _bool bool, _nchar nchar(40));');
26
c1.execute('create table if not exists stabletest (ts timestamp, v1 int, v2 int, v3 int, v4 double) tags (id int, location binary(20));')
S
StoneT2000 已提交
27 28 29 30

// Shell Test : The following uses the cursor to imitate the taos shell

// Insert
31 32
for (let i = 0; i < 10000; i++) {
  let insertData = ["now+" + i + "s", // Timestamp
33 34 35 36 37 38 39 40 41
                    parseInt( R(-Math.pow(2,31) + 1 , Math.pow(2,31) - 1) ), // Int
                    parseInt( R(-Math.pow(2,31) + 1 , Math.pow(2,31) - 1) ), // BigInt
                    parseFloat( R(-3.4E38, 3.4E38) ), // Float
                    parseFloat( R(-1.7E308, 1.7E308) ), // Double
                    "\"Long Binary\"", // Binary
                    parseInt( R(-32767, 32767) ), // Small Int
                    parseInt( R(-127, 127) ), // Tiny Int
                    randomBool(),
                    "\"Nchars 一些中文字幕\""]; // Bool
S
StoneT2000 已提交
42 43 44 45
  c1.execute('insert into td_connector_test.all_types values(' + insertData.join(',') + ' );', {quiet:true});
  if (i % 1000 == 0) {
    console.log("Insert # " , i);
  }
46 47
}

S
StoneT2000 已提交
48
// Select
49 50
c1.execute('select * from td_connector_test.all_types limit 10 offset 1000;');
var d = c1.fetchall();
S
StoneT2000 已提交
51
console.log(c1.fields);
52 53
console.log(d);

S
StoneT2000 已提交
54
// Functions
55 56
c1.execute('select count(*), avg(_int), sum(_float), max(_bigint), min(_double) from td_connector_test.all_types;');
var d = c1.fetchall();
S
StoneT2000 已提交
57
console.log(c1.fields);
58 59
console.log(d);

60
// Immediate Execution like the Shell
S
StoneT2000 已提交
61

62
c1.query('select count(*), stddev(_double), min(_tinyint) from all_types where _tinyint > 50 and _int < 0;', true).then(function(result){
S
StoneT2000 已提交
63 64 65 66 67
  result.pretty();
})
c1.query('select _tinyint, _bool from all_types where _tinyint > 50 and _int < 0 limit 50;', true).then(function(result){
  result.pretty();
})
68 69 70 71
c1.query('select stddev(_double), stddev(_bigint), stddev(_float) from all_types;', true).then(function(result){
  result.pretty();
})
c1.query('select stddev(_double), stddev(_bigint), stddev(_float) from all_types interval(1m) limit 100;', true).then(function(result){
S
StoneT2000 已提交
72 73 74
  result.pretty();
})

75 76 77 78
// Binding arguments, and then using promise
var q = c1.query('select * from td_connector_test.all_types where ts >= ? and _int > ? limit 100 offset 40;').bind(new Date(1231), 100)
console.log(q.query);
q.execute().then(function(r) {
S
StoneT2000 已提交
79 80 81
  r.pretty();
});

82

83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135

// Raw Async Testing (Callbacks, not promises)
function cb2(param, result, rowCount, rd) {
  console.log("RES *", result);
  console.log("Async fetched", rowCount, "rows");
  console.log("Passed Param: ", param);
  console.log("Fields", rd.fields);
  console.log("Data", rd.data);

}
function cb1(param,result,code) {
  console.log('Callbacked!');
  console.log("RES *", result);
  console.log("Status: ", code);
  console.log("Passed Param", param);
  c1.fetchall_a(result, cb2, param)
}

c1.execute_a("describe td_connector_test.all_types;", cb1, {myparam:3.141});

function cb4(param, result, rowCount, rd) {
  console.log("RES *", result);
  console.log("Async fetched", rowCount, "rows");
  console.log("Passed Param: ", param);
  console.log("Fields", rd.fields);
  console.log("Data", rd.data);

}
// Without directly calling fetchall_a
var thisRes;
function cb3(param,result,code) {
  console.log('Callbacked!');
  console.log("RES *", result);
  console.log("Status: ", code);
  console.log("Passed Param", param);
  thisRes = result;
}
//Test calling execute and fetchall seperately and not through callbacks
var param = c1.execute_a("describe td_connector_test.all_types;", cb3, {e:2.718});
console.log("Passed Param outside of callback: ", param);
setTimeout(function(){
  c1.fetchall_a(thisRes, cb4, param);
},100);

// Async through promises
var aq = c1.query('select count(*) from td_connector_test.all_types;')
aq.execute_a().then(function(data) {
  data.pretty();
})
c1.query('describe td_connector_test.stabletest;').execute_a().then(r=> r.pretty());
setTimeout(function(){
  c1.query('drop database td_connector_test;');
},2000);
136
conn.close();