-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdb_generic_sqldataset.js
131 lines (112 loc) · 4.05 KB
/
db_generic_sqldataset.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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
function createDataset(fields, constraints, sortFields) {
/* +-------------------------------------------------------------------------+
* | Script padrão para seleção de dados em datasets internos ou externos do |
* | do Fluig. |
* +-------------------------------------------------------------------------+
* | Desenvolvido por Alexandre Nicolau. |
* +-------------------------------------------------------------------------+
* | Parâmetros: |
* | |
* | - fields |
* | [0] = Enviar o nome do datasource a ser utilizado para conexão aos |
* | dados. Exemplo: "/jdbc/FluigDSRO" |
* | |
* | [1] = Enviar o comando SQL a ser executado no dataset. |
* | Exemplo: "SELECT ..." ou "UPDATE ..." ou "DELETE ..." |
* | |
* | Demais parâmetros serão ignorados pelo dataset. |
* | |
* +-------------------------------------------------------------------------+
*/
// cria o dataset
var newDataset = DatasetBuilder.newDataset();
// verifica se foi informada a tabela e campos
if (fields == null) {
newDataset.addColumn("INFO");
newDataset.addRow(["Informe a tabela e SQL a ser executado!"]);
return newDataset;
}
// ---
try {
// cria os campos de tabela e campos
var strBase = "";
var strQuery = "";
// ---
// loop para armazenar o nome da tabela e campos
for (var iX = 0; iX < fields.length; iX++) {
// switch de identificação do campo a ser preenchido
switch (iX) {
case 0:
strBase = fields[iX];
break;
case 1:
strQuery = fields[iX];
break;
}
// ---
}
// ---
// verifica se deve retornar todos os campos da tabela
if (strQuery == "") {
newDataset.addColumn("INFO");
newDataset.addRow(["Informe a tabela e SQL a ser executado!"]);
return newDataset;
}
// ---
// modifica o comando SQL para uppercase
// strQuery = strQuery.toUpperCase();
// adiciona o sql no LOG
log.info("DYNAMIC QUERY:\n" + strQuery);
// ### Bloco de manipulação da base de dados
var dataSource = strBase;
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var created = false;
var conn = ds.getConnection();
var stmt = conn.createStatement();
// ---
// verifica se o comando enviado é um SELECT
if (strQuery.search(/select/i) != -1) {
// executa a query de "select"
var rs = stmt.executeQuery(strQuery);
var result = rs.getMetaData();
var columnCount = rs.getMetaData().getColumnCount();
// ---
// loop nos registros da query
while(rs.next()) {
// verifica se não foram criadas as colunas
if(!created) {
for(var i = 1; i <= columnCount; i++) {
newDataset.addColumn(rs.getMetaData().getColumnName(i));
}
created = true;
}
// ---
var Arr = new Array();
for(var i = 1; i <= columnCount; i++) {
var obj = rs.getObject(rs.getMetaData().getColumnName(i));
if (null!=obj) {
Arr[i-1] = rs.getObject(rs.getMetaData().getColumnName(i)).toString();
}
else {
Arr[i-1] = "null";
}
}
newDataset.addRow(Arr);
}
// --- fim do loop
} else {
var rs = stmt.executeUpdate(strQuery);
newDataset.addColumn("RowsAffected");
newDataset.addRow([rs.toString()]);
}
// --- (fim do bloco verifica se o comando enviado é um SELECT)
} catch(e) {
log.error("DYNAMIC QUERY ERROR:\n" + e.message);
} finally {
if(stmt != null) stmt.close();
if(conn != null) conn.close();
}
// retorna o resultado da query
return newDataset;
}