test.js 4.9 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

// Initialize
22
//c1.execute('drop database td_connector_test;');
S
StoneT2000 已提交
23
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
L
liu0x54 已提交
31
for (let i = 0; i < 1000; i++) {
32
  let insertData = ["now+" + i + "s", // Timestamp
33 34 35
                    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
S
StoneT2000 已提交
36
                    parseFloat( R(-1.7E30, 1.7E30) ), // Double
37 38 39 40
                    "\"Long Binary\"", // Binary
                    parseInt( R(-32767, 32767) ), // Small Int
                    parseInt( R(-127, 127) ), // Tiny Int
                    randomBool(),
S
StoneT2000 已提交
41
                    "\"Nchars\""]; // Bool
S
StoneT2000 已提交
42
  c1.execute('insert into td_connector_test.all_types values(' + insertData.join(',') + ' );', {quiet:true});
L
liu0x54 已提交
43
  if (i % 100 == 0) {
S
StoneT2000 已提交
44 45
    console.log("Insert # " , i);
  }
46 47
}

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

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

62
// Immediate Execution like the Shell
S
StoneT2000 已提交
63

L
liu0x54 已提交
64 65 66 67
//c1.query('select count(*), stddev(_double), min(_tinyint) from all_types where _tinyint > 50 and _int < 0;', true).then(function(result){
//  result.pretty();
//})

S
StoneT2000 已提交
68 69 70
c1.query('select _tinyint, _bool from all_types where _tinyint > 50 and _int < 0 limit 50;', true).then(function(result){
  result.pretty();
})
L
liu0x54 已提交
71

72 73 74 75
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 已提交
76 77 78
  result.pretty();
})

79 80 81 82
// 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 已提交
83 84 85
  r.pretty();
});

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 136 137 138 139

// 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);
140
conn.close();