@cyklang/cli 0.9.3 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/AssetCommand.js +3 -5
- package/build/DBClient.d.ts +5 -1
- package/build/DBClient.js +28 -13
- package/build/TableCommand.js +6 -2
- package/build/TableDataCommand.js +7 -3
- package/package.json +2 -2
- package/src/AssetCommand.ts +4 -5
- package/src/DBClient.ts +29 -16
- package/src/TableCommand.ts +5 -2
- package/src/TableDataCommand.ts +5 -3
- package/test/db/t10.output +3 -22
- package/test/db/t10.xml +22 -22
- package/test/db/t13.xml +1 -1
- package/test/db/t14.output +4 -0
- package/test/db/t15.output +1 -1
- package/test/db/t20.xml +5 -0
- package/test/db/t21.output +8 -0
- package/test/db/t21.xml +12 -0
- package/test/db/t22.xml +3 -3
- package/test/db/t29.output +15 -0
- package/test/db/t29.xml +13 -0
- package/test/db/t30.output +0 -0
- package/test/db/t30.xml +15 -0
- package/test/t0.xml +2 -2
- package/test/t01.output +51 -31
- package/test/t01.xml +47 -27
- package/test/t07.xml +20 -19
- package/test/t11.xml +1 -1
- package/test/t28.output +4 -0
- package/test/t28.xml +27 -0
- package/test/db/test_schema.xml +0 -15
package/build/AssetCommand.js
CHANGED
|
@@ -56,7 +56,7 @@ const scanAssets = async (dbManager, dest) => {
|
|
|
56
56
|
throw 'xmlResult null or undefined';
|
|
57
57
|
const tag = (0, core_1.parseXML)('scanAssets', xmlResult);
|
|
58
58
|
const objResult = await dbManager.scope.structure.objectDataType.parseData(tag, dbManager.scope);
|
|
59
|
-
const rows = objResult.variables.getData('
|
|
59
|
+
const rows = objResult.variables.getData('resultset').variables;
|
|
60
60
|
for (let ind = 0; ind < rows.list.length; ind++) {
|
|
61
61
|
const { variable: row } = rows.list[ind];
|
|
62
62
|
const record = row.data;
|
|
@@ -489,11 +489,9 @@ async function uploadAssetContent(dbAsset, fileName, dbRemote) {
|
|
|
489
489
|
const file = fs.createReadStream(fileName);
|
|
490
490
|
const form = new form_data_1.default();
|
|
491
491
|
form.append('uploadFile', file);
|
|
492
|
-
const route =
|
|
492
|
+
const route = `/api/admin/assets/${dbAsset.id}/content`;
|
|
493
493
|
const resp = await dbRemote?.apiServer.post(route, form);
|
|
494
|
-
|
|
495
|
-
logger.info(fileName + ' uploaded');
|
|
496
|
-
}
|
|
494
|
+
logger.debug("metadata", resp);
|
|
497
495
|
}
|
|
498
496
|
catch (err) {
|
|
499
497
|
logger.error(err);
|
package/build/DBClient.d.ts
CHANGED
|
@@ -12,7 +12,6 @@ export declare class DBClient {
|
|
|
12
12
|
* @param source
|
|
13
13
|
*/
|
|
14
14
|
execScript(source: string): Promise<void>;
|
|
15
|
-
runQuery(): Promise<void>;
|
|
16
15
|
selectFromTable(title: string, tableName: string, options: {
|
|
17
16
|
fields: string;
|
|
18
17
|
sort?: string | undefined;
|
|
@@ -20,4 +19,9 @@ export declare class DBClient {
|
|
|
20
19
|
width?: string | undefined;
|
|
21
20
|
}): Promise<any[]>;
|
|
22
21
|
deleteModule(dbname: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @param sql
|
|
25
|
+
*/
|
|
26
|
+
runQuery(sql: string): Promise<void>;
|
|
23
27
|
}
|
package/build/DBClient.js
CHANGED
|
@@ -45,8 +45,6 @@ class DBClient {
|
|
|
45
45
|
console.log(err);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
async runQuery() {
|
|
49
|
-
}
|
|
50
48
|
async selectFromTable(title, tableName, options) {
|
|
51
49
|
let result = [];
|
|
52
50
|
try {
|
|
@@ -67,7 +65,7 @@ class DBClient {
|
|
|
67
65
|
order_by += ',';
|
|
68
66
|
order_by += colname;
|
|
69
67
|
}
|
|
70
|
-
logger.debug('order_by ' + order_by)
|
|
68
|
+
// logger.debug('order_by ' + order_by)
|
|
71
69
|
request.parameters.addVariable('order_by', stringDataType).data = new core_1.PrimitiveData(stringDataType, order_by);
|
|
72
70
|
}
|
|
73
71
|
// if (options !== undefined) {
|
|
@@ -81,26 +79,27 @@ class DBClient {
|
|
|
81
79
|
throw 'xmlResult undefined';
|
|
82
80
|
const tagXmlResult = (0, core_1.parseXML)('xmlResult', xmlResult);
|
|
83
81
|
const objXmlResult = (await objectDataType.parseData(tagXmlResult, this.dbManager.scope));
|
|
84
|
-
const
|
|
85
|
-
if (
|
|
82
|
+
const metaObject = (objXmlResult.variables.getData('meta'));
|
|
83
|
+
if (metaObject === undefined)
|
|
86
84
|
throw 'objectMeta not found';
|
|
87
|
-
const
|
|
88
|
-
if (
|
|
89
|
-
throw 'meta
|
|
90
|
-
|
|
91
|
-
|
|
85
|
+
const typeObject = metaObject.variables.getData('resultset');
|
|
86
|
+
if (!typeObject || typeObject === null)
|
|
87
|
+
throw 'meta resultset not found';
|
|
88
|
+
if (typeObject.type.name !== 'type')
|
|
89
|
+
throw 'meta resulset is not type';
|
|
90
|
+
const objType = typeObject;
|
|
92
91
|
const fields = options.fields.split(',');
|
|
93
92
|
const list = new List();
|
|
94
93
|
if (options.width !== undefined)
|
|
95
94
|
list.width = options.width;
|
|
96
95
|
for (let ind = 0; ind < fields.length; ind++) {
|
|
97
96
|
const field = fields[ind];
|
|
98
|
-
const dbColumn =
|
|
97
|
+
const dbColumn = objType.dbColumns?.columns.filter((dbColumn) => dbColumn.name === field)[0];
|
|
99
98
|
if (dbColumn === undefined)
|
|
100
99
|
throw 'field ' + field + ' not found';
|
|
101
100
|
list.addDBColumn(dbColumn);
|
|
102
101
|
}
|
|
103
|
-
const objDataset = objXmlResult.variables.getData(
|
|
102
|
+
const objDataset = objXmlResult.variables.getData('resultset');
|
|
104
103
|
for (let ind = 0; ind < objDataset.variables.length(); ind++) {
|
|
105
104
|
const variable = objDataset.variables.at(ind);
|
|
106
105
|
if (variable) {
|
|
@@ -129,6 +128,22 @@ class DBClient {
|
|
|
129
128
|
logger.error(err);
|
|
130
129
|
}
|
|
131
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
*
|
|
133
|
+
* @param sql
|
|
134
|
+
*/
|
|
135
|
+
async runQuery(sql) {
|
|
136
|
+
try {
|
|
137
|
+
const request = new core_1.DBExecuteRequest();
|
|
138
|
+
const xml = `<query>
|
|
139
|
+
|
|
140
|
+
</query>
|
|
141
|
+
`;
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
logger.error(err);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
132
147
|
}
|
|
133
148
|
exports.DBClient = DBClient;
|
|
134
149
|
class List {
|
|
@@ -169,7 +184,7 @@ class List {
|
|
|
169
184
|
}
|
|
170
185
|
colws.push(colw);
|
|
171
186
|
}
|
|
172
|
-
logger.debug('colws', colws.join(','))
|
|
187
|
+
// logger.debug('colws', colws.join(','))
|
|
173
188
|
// calculate column.actualWidth
|
|
174
189
|
let total_width = 0;
|
|
175
190
|
for (let indi = 0; indi < this.columns.length; indi++) {
|
package/build/TableCommand.js
CHANGED
|
@@ -255,9 +255,13 @@ const commandImportExport = async (dbManager, direction, tables, options) => {
|
|
|
255
255
|
// invoke local install of psql CLI
|
|
256
256
|
//--------------------------------------------------------------------------------------------------------------------
|
|
257
257
|
function psqlCmd(dbTable, direction, options) {
|
|
258
|
+
if (!dbTable.objectDataType)
|
|
259
|
+
throw 'dbTable.objectDataType undefind';
|
|
260
|
+
if (!dbTable.objectDataType.dbColumns)
|
|
261
|
+
throw 'dbTable.objectDataType.dbColumns undefined';
|
|
258
262
|
let lcols;
|
|
259
|
-
for (let indj = 0; indj < dbTable.columns.length; indj++) {
|
|
260
|
-
const dbColumn = dbTable.columns[indj];
|
|
263
|
+
for (let indj = 0; indj < dbTable.objectDataType.dbColumns.columns.length; indj++) {
|
|
264
|
+
const dbColumn = dbTable.objectDataType.dbColumns.columns[indj];
|
|
261
265
|
if (lcols === undefined) {
|
|
262
266
|
lcols = "(";
|
|
263
267
|
}
|
|
@@ -27,9 +27,13 @@ class TableDataCommand extends Cmd_1.Cmd {
|
|
|
27
27
|
const dbTable = await this.dbManager.dbTableExist(table);
|
|
28
28
|
if (dbTable === undefined)
|
|
29
29
|
throw 'table ' + table + ' not found';
|
|
30
|
+
if (!dbTable.objectDataType)
|
|
31
|
+
throw 'dbTable.objectDataType undefind';
|
|
32
|
+
if (!dbTable.objectDataType.dbColumns)
|
|
33
|
+
throw 'dbTable.objectDataType.dbColumns undefined';
|
|
30
34
|
let fields = '';
|
|
31
|
-
for (let ind = 0; ind < dbTable.columns.length; ind++) {
|
|
32
|
-
const dbColumn = dbTable.columns[ind];
|
|
35
|
+
for (let ind = 0; ind < dbTable.objectDataType.dbColumns.columns.length; ind++) {
|
|
36
|
+
const dbColumn = dbTable.objectDataType.dbColumns.columns[ind];
|
|
33
37
|
let ok = false;
|
|
34
38
|
let fieldName = dbColumn.name;
|
|
35
39
|
if (dbColumn.dbType === 'text' || dbColumn.dbType === 'bytea') {
|
|
@@ -45,7 +49,7 @@ class TableDataCommand extends Cmd_1.Cmd {
|
|
|
45
49
|
fields += fieldName;
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
|
-
|
|
52
|
+
// logger.debug('commandData:', table, 'fields: ', fields);
|
|
49
53
|
const dbClient = new DBClient_1.DBClient(this.dbManager);
|
|
50
54
|
let title = 'Table ' + table;
|
|
51
55
|
if (options.where !== undefined) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyklang/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "cyklang CLI",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"author": "",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@cyklang/core": "^0.
|
|
20
|
+
"@cyklang/core": "^0.8.0",
|
|
21
21
|
"commander": "^9.4.0",
|
|
22
22
|
"dotenv": "^16.0.1",
|
|
23
23
|
"form-data": "^4.0.0",
|
package/src/AssetCommand.ts
CHANGED
|
@@ -30,7 +30,7 @@ const scanAssets = async (dbManager: DBManager | undefined, dest?: string): Prom
|
|
|
30
30
|
if (xmlResult === undefined || xmlResult === null) throw 'xmlResult null or undefined'
|
|
31
31
|
const tag = parseXML('scanAssets', xmlResult)
|
|
32
32
|
const objResult = await dbManager.scope.structure.objectDataType.parseData(tag, dbManager.scope) as ObjectData
|
|
33
|
-
const rows = (objResult.variables.getData('
|
|
33
|
+
const rows = (objResult.variables.getData('resultset') as ObjectData).variables
|
|
34
34
|
for (let ind = 0; ind < rows.list.length; ind++) {
|
|
35
35
|
const { variable: row } = rows.list[ind]
|
|
36
36
|
const record = row.data as ObjectData
|
|
@@ -506,11 +506,10 @@ async function uploadAssetContent(dbAsset: DBAsset, fileName: string, dbRemote:
|
|
|
506
506
|
const form = new FormData()
|
|
507
507
|
form.append('uploadFile', file)
|
|
508
508
|
|
|
509
|
-
const route =
|
|
509
|
+
const route = `/api/admin/assets/${dbAsset.id}/content`
|
|
510
510
|
const resp = await dbRemote?.apiServer.post(route, form)
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
}
|
|
511
|
+
logger.debug("metadata", resp)
|
|
512
|
+
|
|
514
513
|
}
|
|
515
514
|
catch (err) {
|
|
516
515
|
logger.error(err)
|
package/src/DBClient.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BasicType, DBColumn, DBExecuteRequest, DBManager, DBTable, ObjectData, parseXML, PrimitiveData, Script, variable2json, XmlError } from "@cyklang/core";
|
|
1
|
+
import { BasicType, DBColumn, DBExecuteRequest, DBManager, DBTable, ObjectData, ObjectDataType, parseXML, PrimitiveData, Script, variable2json, XmlError } from "@cyklang/core";
|
|
2
2
|
import loglevel from "loglevel";
|
|
3
3
|
import { errorconsole } from "./console";
|
|
4
4
|
const logger = loglevel.getLogger('DBClient.ts')
|
|
@@ -44,10 +44,6 @@ export class DBClient {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
async runQuery() {
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
47
|
async selectFromTable(title: string, tableName: string, options:
|
|
52
48
|
{ fields: string, sort?: string | undefined, where?: string | undefined, width?: string | undefined }): Promise<any[]> {
|
|
53
49
|
|
|
@@ -72,7 +68,7 @@ export class DBClient {
|
|
|
72
68
|
if (order_by !== '') order_by += ','
|
|
73
69
|
order_by += colname
|
|
74
70
|
}
|
|
75
|
-
logger.debug('order_by ' + order_by)
|
|
71
|
+
// logger.debug('order_by ' + order_by)
|
|
76
72
|
request.parameters.addVariable('order_by', stringDataType).data = new PrimitiveData(stringDataType, order_by)
|
|
77
73
|
}
|
|
78
74
|
|
|
@@ -88,13 +84,12 @@ export class DBClient {
|
|
|
88
84
|
const tagXmlResult = parseXML('xmlResult', xmlResult)
|
|
89
85
|
|
|
90
86
|
const objXmlResult = (await objectDataType.parseData(tagXmlResult, this.dbManager.scope)) as ObjectData
|
|
91
|
-
const
|
|
92
|
-
if (
|
|
93
|
-
const
|
|
94
|
-
if (
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
const dbTable = new DBTable(tagDBTable)
|
|
87
|
+
const metaObject = (objXmlResult.variables.getData('meta')) as ObjectData
|
|
88
|
+
if (metaObject === undefined) throw 'objectMeta not found'
|
|
89
|
+
const typeObject = metaObject.variables.getData('resultset')
|
|
90
|
+
if (!typeObject || typeObject === null) throw 'meta resultset not found'
|
|
91
|
+
if (typeObject.type.name !== 'type') throw 'meta resulset is not type'
|
|
92
|
+
const objType = typeObject as ObjectDataType
|
|
98
93
|
|
|
99
94
|
const fields = options.fields.split(',')
|
|
100
95
|
const list = new List()
|
|
@@ -102,12 +97,12 @@ export class DBClient {
|
|
|
102
97
|
|
|
103
98
|
for (let ind = 0; ind < fields.length; ind++) {
|
|
104
99
|
const field = fields[ind]
|
|
105
|
-
const dbColumn =
|
|
100
|
+
const dbColumn = objType.dbColumns?.columns.filter((dbColumn) => dbColumn.name === field)[0]
|
|
106
101
|
if (dbColumn === undefined) throw 'field ' + field + ' not found'
|
|
107
102
|
list.addDBColumn(dbColumn)
|
|
108
103
|
}
|
|
109
104
|
|
|
110
|
-
const objDataset = objXmlResult.variables.getData(
|
|
105
|
+
const objDataset = objXmlResult.variables.getData('resultset') as ObjectData
|
|
111
106
|
for (let ind = 0; ind < objDataset.variables.length(); ind++) {
|
|
112
107
|
const variable = objDataset.variables.at(ind)
|
|
113
108
|
if (variable) {
|
|
@@ -142,6 +137,24 @@ export class DBClient {
|
|
|
142
137
|
}
|
|
143
138
|
|
|
144
139
|
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
*
|
|
143
|
+
* @param sql
|
|
144
|
+
*/
|
|
145
|
+
async runQuery(sql: string) {
|
|
146
|
+
try {
|
|
147
|
+
const request = new DBExecuteRequest()
|
|
148
|
+
const xml = `<query>
|
|
149
|
+
|
|
150
|
+
</query>
|
|
151
|
+
`
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
logger.error(err)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
145
158
|
}
|
|
146
159
|
|
|
147
160
|
class List {
|
|
@@ -187,7 +200,7 @@ class List {
|
|
|
187
200
|
colws.push(colw)
|
|
188
201
|
}
|
|
189
202
|
|
|
190
|
-
logger.debug('colws', colws.join(','))
|
|
203
|
+
// logger.debug('colws', colws.join(','))
|
|
191
204
|
|
|
192
205
|
// calculate column.actualWidth
|
|
193
206
|
let total_width = 0
|
package/src/TableCommand.ts
CHANGED
|
@@ -249,9 +249,12 @@ const commandImportExport = async (dbManager: DBManager, direction: 'from' | 'to
|
|
|
249
249
|
|
|
250
250
|
function psqlCmd(dbTable: DBTable, direction: 'from' | 'to', options: Options,) {
|
|
251
251
|
|
|
252
|
+
if (! dbTable.objectDataType ) throw 'dbTable.objectDataType undefind'
|
|
253
|
+
if (! dbTable.objectDataType.dbColumns ) throw 'dbTable.objectDataType.dbColumns undefined'
|
|
254
|
+
|
|
252
255
|
let lcols: string | undefined
|
|
253
|
-
for (let indj = 0; indj < dbTable.columns.length; indj++) {
|
|
254
|
-
const dbColumn = dbTable.columns[indj]
|
|
256
|
+
for (let indj = 0; indj < dbTable.objectDataType.dbColumns.columns.length; indj++) {
|
|
257
|
+
const dbColumn = dbTable.objectDataType.dbColumns.columns[indj]
|
|
255
258
|
if (lcols === undefined) {
|
|
256
259
|
lcols = "("
|
|
257
260
|
}
|
package/src/TableDataCommand.ts
CHANGED
|
@@ -26,11 +26,13 @@ export class TableDataCommand extends Cmd {
|
|
|
26
26
|
|
|
27
27
|
const dbTable = await this.dbManager.dbTableExist(table);
|
|
28
28
|
if (dbTable === undefined) throw 'table ' + table + ' not found';
|
|
29
|
+
if (! dbTable.objectDataType ) throw 'dbTable.objectDataType undefind'
|
|
30
|
+
if (! dbTable.objectDataType.dbColumns ) throw 'dbTable.objectDataType.dbColumns undefined'
|
|
29
31
|
|
|
30
32
|
let fields = '';
|
|
31
33
|
|
|
32
|
-
for (let ind = 0; ind < dbTable.columns.length; ind++) {
|
|
33
|
-
const dbColumn = dbTable.columns[ind];
|
|
34
|
+
for (let ind = 0; ind < dbTable.objectDataType.dbColumns.columns.length; ind++) {
|
|
35
|
+
const dbColumn = dbTable.objectDataType.dbColumns.columns[ind];
|
|
34
36
|
let ok = false;
|
|
35
37
|
let fieldName = dbColumn.name;
|
|
36
38
|
if (dbColumn.dbType === 'text' || dbColumn.dbType === 'bytea') {
|
|
@@ -46,7 +48,7 @@ export class TableDataCommand extends Cmd {
|
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
50
|
|
|
49
|
-
logger.debug('
|
|
51
|
+
// logger.debug('commandData:', table, 'fields: ', fields);
|
|
50
52
|
const dbClient = new DBClient(this.dbManager);
|
|
51
53
|
let title = 'Table ' + table;
|
|
52
54
|
if (options.where !== undefined) {
|
package/test/db/t10.output
CHANGED
|
@@ -1,23 +1,4 @@
|
|
|
1
1
|
New film ID 1
|
|
2
|
-
films_actors.resultset.at(0).
|
|
3
|
-
actor 1 Maria
|
|
4
|
-
string(films_actors.resultset) :
|
|
5
|
-
<object name="t_actor">
|
|
6
|
-
<number name="actor_id">1</number>
|
|
7
|
-
<string name="first_name" literal="">Maria</string>
|
|
8
|
-
<string name="last_name" literal="">CHANE YOU KAYE</string>
|
|
9
|
-
<datetime name="last_update">
|
|
10
|
-
</datetime>
|
|
11
|
-
<string name="cyk_remark" literal="">remarque</string>
|
|
12
|
-
<boolean name="cyk_disable">
|
|
13
|
-
</boolean>
|
|
14
|
-
</object>
|
|
15
|
-
<object name="t_film">
|
|
16
|
-
<number name="film_id">1</number>
|
|
17
|
-
<string name="title" literal="">La mélodie du bonheur</string>
|
|
18
|
-
<string name="description" literal="">Le film préféré de Mao</string>
|
|
19
|
-
<number name="release_year">1965</number>
|
|
20
|
-
<number name="length">60</number>
|
|
21
|
-
<number name="language_id">1</number>
|
|
22
|
-
</object>
|
|
23
|
-
</object>
|
|
2
|
+
films_actors.resultset.at(0).last_name DUPONT
|
|
3
|
+
actor 1 Maria DUPONT, film 1 La mélodie du bonheur
|
|
4
|
+
string(films_actors.resultset.at(0).title) : La mélodie du bonheur
|
package/test/db/t10.xml
CHANGED
|
@@ -2,28 +2,28 @@
|
|
|
2
2
|
<module>
|
|
3
3
|
|
|
4
4
|
<db.table name="t_actor">
|
|
5
|
-
<number name="actor_id"
|
|
6
|
-
<string name="first_name"
|
|
7
|
-
<string name="last_name"
|
|
8
|
-
<datetime name="last_update"
|
|
9
|
-
<string name="cyk_remark"
|
|
10
|
-
<boolean name="cyk_disable"
|
|
5
|
+
<number name="actor_id" dbtype="int" primary="" generated='by default'/>
|
|
6
|
+
<string name="first_name" dbtype="varchar(50)"/>
|
|
7
|
+
<string name="last_name" dbtype="text" />
|
|
8
|
+
<datetime name="last_update" dbtype="timestamp with time zone"/>
|
|
9
|
+
<string name="cyk_remark" dbtype="varchar(255)" />
|
|
10
|
+
<boolean name="cyk_disable" dbtype="boolean"/>
|
|
11
11
|
</db.table>
|
|
12
12
|
|
|
13
13
|
<db.table name="t_film">
|
|
14
|
-
<number name="film_id"
|
|
15
|
-
<string name="title"
|
|
16
|
-
<string name="description"
|
|
17
|
-
<number name="release_year"
|
|
18
|
-
<number name="length"
|
|
19
|
-
<number name="language_id"
|
|
14
|
+
<number name="film_id" dbtype="int" primary="" generated='by default'/>
|
|
15
|
+
<string name="title" dbtype="varchar(255)" />
|
|
16
|
+
<string name="description" dbtype="text" />
|
|
17
|
+
<number name="release_year" dbtype="int"/>
|
|
18
|
+
<number name="length" dbtype="int" />
|
|
19
|
+
<number name="language_id" dbtype="int"/>
|
|
20
20
|
</db.table>
|
|
21
21
|
|
|
22
22
|
<db.table name="t_film_actor">
|
|
23
|
-
<number name="id"
|
|
24
|
-
<number name="actor_id"
|
|
25
|
-
<number name="film_id"
|
|
26
|
-
<number name="length"
|
|
23
|
+
<number name="id" dbtype="int" primary="" generated="by default"/>
|
|
24
|
+
<number name="actor_id" dbtype="int"/>
|
|
25
|
+
<number name="film_id" dbtype="int"/>
|
|
26
|
+
<number name="length" dbtype="int"/>
|
|
27
27
|
</db.table>
|
|
28
28
|
|
|
29
29
|
<query name="t_films_actors">
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
<string name="entities">"t_actor t_film"</string>
|
|
36
36
|
<string name="sql" literal="">
|
|
37
|
-
SELECT
|
|
37
|
+
SELECT t_actor.*, t_film.* FROM public.t_actor
|
|
38
38
|
join t_film_actor on t_film_actor.actor_id = t_actor.actor_id
|
|
39
39
|
join t_film on t_film_actor.film_id = t_film.film_id
|
|
40
40
|
where t_film.length between {{ length_from }} and {{ length_to }}
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
|
|
46
46
|
<object name="actor_maria">
|
|
47
47
|
<string name="first_name">"Maria" </string>
|
|
48
|
-
<string name='last_name'>'
|
|
48
|
+
<string name='last_name'>'DUPONT'</string>
|
|
49
49
|
<string name='cyk_remark'> 'remarque' </string>
|
|
50
50
|
</object>
|
|
51
51
|
|
|
@@ -111,19 +111,19 @@
|
|
|
111
111
|
<number name="length_to">60</number>
|
|
112
112
|
</runquery>
|
|
113
113
|
|
|
114
|
-
<print>"films_actors.resultset.at(0).
|
|
114
|
+
<print>"films_actors.resultset.at(0).last_name " + films_actors.resultset.at(0).last_name</print>
|
|
115
115
|
<call object="films_actors.resultset" method="foreach">
|
|
116
116
|
<function>
|
|
117
117
|
<object name="result" />
|
|
118
118
|
<block>
|
|
119
|
-
<print>"actor " + result.
|
|
120
|
-
+ ", film " + result.
|
|
119
|
+
<print>"actor " + result.actor_id + " " + result.first_name + " " + result.last_name
|
|
120
|
+
+ ", film " + result.film_id + " " + result.title
|
|
121
121
|
</print>
|
|
122
122
|
</block>
|
|
123
123
|
</function>
|
|
124
124
|
</call>
|
|
125
125
|
|
|
126
|
-
<print>"string(films_actors.resultset) : "+string(films_actors.resultset)</print>
|
|
126
|
+
<print>"string(films_actors.resultset.at(0).title) : "+string(films_actors.resultset.at(0).title)</print>
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
</module>
|
package/test/db/t13.xml
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</object>
|
|
18
18
|
<string name="entities">"t_actor t_film"</string>
|
|
19
19
|
<string name="sql" literal="">
|
|
20
|
-
SELECT
|
|
20
|
+
SELECT t_actor.*, t_film.* FROM public.t_actor
|
|
21
21
|
join t_film_actor on t_film_actor.actor_id = t_actor.actor_id
|
|
22
22
|
join t_film on t_film_actor.film_id = t_film.film_id
|
|
23
23
|
where t_film.length between {{ length_from }} and {{ length_to }}
|
package/test/db/t14.output
CHANGED
|
@@ -35,6 +35,8 @@ actress <number name="actor_id">
|
|
|
35
35
|
</string>
|
|
36
36
|
<boolean name="cyk_disable">
|
|
37
37
|
</boolean>
|
|
38
|
+
<object name="t_actor__meta">
|
|
39
|
+
</object>
|
|
38
40
|
user1 <number name="user_id">
|
|
39
41
|
</number>
|
|
40
42
|
<string name="user_name">
|
|
@@ -50,3 +52,5 @@ user1 <number name="user_id">
|
|
|
50
52
|
<boolean name="user_disable">false</boolean>
|
|
51
53
|
<string name="user_lang">
|
|
52
54
|
</string>
|
|
55
|
+
<object name="cyk_user__meta">
|
|
56
|
+
</object>
|
package/test/db/t15.output
CHANGED
|
@@ -5,6 +5,6 @@ test de if()
|
|
|
5
5
|
<number name="actor_id">1</number>
|
|
6
6
|
<string name="title" literal="">La mélodie du bonheur</string>
|
|
7
7
|
<string name="first_name" literal="">Maria</string>
|
|
8
|
-
<string name="last_name" literal="">
|
|
8
|
+
<string name="last_name" literal="">DUPONT</string>
|
|
9
9
|
</object>
|
|
10
10
|
actors_by_film.resultset.length(): 1
|
package/test/db/t20.xml
CHANGED
package/test/db/t21.output
CHANGED
|
@@ -21,3 +21,11 @@ chaine : 150
|
|
|
21
21
|
</datetime>
|
|
22
22
|
<datetime name="dtnull1">
|
|
23
23
|
</datetime>
|
|
24
|
+
string(dossier): <number name="id">
|
|
25
|
+
</number>
|
|
26
|
+
<string name="libelle">
|
|
27
|
+
</string>
|
|
28
|
+
string(presta): <number name="pst_id">
|
|
29
|
+
</number>
|
|
30
|
+
<string name="pst_libelle">
|
|
31
|
+
</string>
|
package/test/db/t21.xml
CHANGED
|
@@ -98,4 +98,16 @@
|
|
|
98
98
|
<print>string(document)</print>
|
|
99
99
|
<print>string(object(string(document)))</print>
|
|
100
100
|
|
|
101
|
+
<object type="m_t20.Dossier" name="dossier"/>
|
|
102
|
+
<print>"string(dossier): " + string(dossier)</print>
|
|
103
|
+
|
|
104
|
+
<object name="dcl">
|
|
105
|
+
<type name="Prestation">
|
|
106
|
+
<number name="pst_id"/>
|
|
107
|
+
<string name="pst_libelle"/>
|
|
108
|
+
</type>
|
|
109
|
+
</object>
|
|
110
|
+
<object type="dcl.Prestation" name="presta"/>
|
|
111
|
+
<print>"string(presta): " + string(presta)</print>
|
|
112
|
+
|
|
101
113
|
</module>
|
package/test/db/t22.xml
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
<object name="result_t_actor"/>
|
|
7
7
|
<db.select table="t_actor" result="result_t_actor"/>
|
|
8
8
|
<!-- <db.execute select_from_table="t_actor" result="result_t_actor"/> -->
|
|
9
|
-
|
|
9
|
+
<print>"result_t_actor: " + string(result_t_actor)</print>
|
|
10
10
|
<object name="result_">
|
|
11
11
|
<string name="name">"CYK"</string>
|
|
12
12
|
<string name="surname">"Philippe"</string>
|
|
13
|
-
<object name="t_actor">result_t_actor.
|
|
13
|
+
<object name="t_actor">result_t_actor.resultset</object>
|
|
14
14
|
<object name="meta">
|
|
15
|
-
<string name="t_actor">result_t_actor.meta.
|
|
15
|
+
<string name="t_actor">result_t_actor.meta.resultset</string>
|
|
16
16
|
</object>
|
|
17
17
|
</object>
|
|
18
18
|
<set name="result">result_</set>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
leo: <number name="actor_id">
|
|
2
|
+
</number>
|
|
3
|
+
<string name="first_name">
|
|
4
|
+
</string>
|
|
5
|
+
<string name="last_name">
|
|
6
|
+
</string>
|
|
7
|
+
<datetime name="last_update">
|
|
8
|
+
</datetime>
|
|
9
|
+
<string name="cyk_remark">
|
|
10
|
+
</string>
|
|
11
|
+
<boolean name="cyk_disable">
|
|
12
|
+
</boolean>
|
|
13
|
+
<object name="t_actor__meta">
|
|
14
|
+
</object>
|
|
15
|
+
result: Leonardo
|
package/test/db/t29.xml
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<?xml-model href="https://www.cyklang.net/schema/cyklang.xsd" type="application/xml" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
|
2
|
+
<module>
|
|
3
|
+
<object name="leo">
|
|
4
|
+
newDBRow("t_actor")
|
|
5
|
+
</object>
|
|
6
|
+
<print>"leo: " + string(leo)</print>
|
|
7
|
+
<set name="leo.first_name">"Leonardo"</set>
|
|
8
|
+
<set name="leo.last_name">"DI CAPRIO"</set>
|
|
9
|
+
<object name="result"/>
|
|
10
|
+
<call object="leo" method="dbinsert" returns="result"/>
|
|
11
|
+
<print>"result: " + string(result.first_name)</print>
|
|
12
|
+
<!-- <print>"objson: " + objson(result)</print> -->
|
|
13
|
+
</module>
|
|
File without changes
|
package/test/db/t30.xml
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<?xml-model href="https://www.cyklang.net/schema/cyklang.xsd" ?>
|
|
2
|
+
<module>
|
|
3
|
+
<db.table name="cook_genre">
|
|
4
|
+
<string name="genre_name" primary=""/>
|
|
5
|
+
</db.table>
|
|
6
|
+
|
|
7
|
+
<db.table name="cook_recipe">
|
|
8
|
+
<number name="rcp_id" dbtype="int" generated="by default" label="ID recette" primary=""/>
|
|
9
|
+
<string name="rcp_name" label="Recette"/>
|
|
10
|
+
<string name="rcp_genre" label="Genre"/>
|
|
11
|
+
<foreignkey parent="cook_genre">
|
|
12
|
+
<string name="genre_name">"rcp_genre"</string>
|
|
13
|
+
</foreignkey>
|
|
14
|
+
</db.table>
|
|
15
|
+
</module>
|
package/test/t0.xml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<block>
|
|
2
|
-
<type name="
|
|
2
|
+
<type name="Dossier">
|
|
3
3
|
<number name="id" />
|
|
4
4
|
<string name="libelle" />
|
|
5
5
|
</type>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<print>"28" + "12"</print>
|
|
17
17
|
<print>28 + 12</print>
|
|
18
18
|
|
|
19
|
-
<
|
|
19
|
+
<object type="Dossier" name="dos1" />
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
<let name="dos1.id">1</let>
|
package/test/t01.output
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
******* Mon nom est Dossier DUPONT id 1
|
|
2
2
|
Dossier remorquage : DURAND lieu Saint-Denis
|
|
3
|
-
then dos2.
|
|
3
|
+
then dos2.dos_libelle == DURAND
|
|
4
4
|
Nested block dos1.id 1
|
|
5
5
|
*** Function add BEGIN a 150 b 300
|
|
6
6
|
else a gt b
|
|
@@ -27,7 +27,7 @@ factorielle de 5 : 120
|
|
|
27
27
|
PST1 id=100 libelle=Prestation 1
|
|
28
28
|
PST2 id=100 libelle=Prestation 2
|
|
29
29
|
PST1 id=100 libelle=Prestation 2
|
|
30
|
-
dos1.prestation.
|
|
30
|
+
dos1.prestation.pst_libelle = Prestation 2
|
|
31
31
|
sum 150
|
|
32
32
|
sum 50
|
|
33
33
|
sum 10
|
|
@@ -41,53 +41,73 @@ dos3 300 dossier 300
|
|
|
41
41
|
<number name="id">1000</number>
|
|
42
42
|
<string name="libelle" literal="">libellé dossier</string>
|
|
43
43
|
Vidage de l'object pst1 :
|
|
44
|
-
name
|
|
45
|
-
name
|
|
44
|
+
name pst_id, value 100
|
|
45
|
+
name pst_libelle, value Prestation 2
|
|
46
46
|
v_obj.nested.member = 888
|
|
47
47
|
list: <object type="dossier">
|
|
48
|
-
<number name="
|
|
49
|
-
<string name="
|
|
48
|
+
<number name="dos_id">1</number>
|
|
49
|
+
<string name="dos_libelle" literal="">Dossier DUPONT</string>
|
|
50
50
|
<object name="prestation" type="prestation">
|
|
51
|
-
<number name="
|
|
52
|
-
<string name="
|
|
51
|
+
<number name="pst_id">100</number>
|
|
52
|
+
<string name="pst_libelle" literal="">Prestation 2</string>
|
|
53
53
|
</object>
|
|
54
54
|
</object>
|
|
55
55
|
<object type="dossier_remorquage">
|
|
56
|
-
<number name="
|
|
57
|
-
<string name="
|
|
56
|
+
<number name="dos_id">2</number>
|
|
57
|
+
<string name="dos_libelle" literal="">DURAND</string>
|
|
58
58
|
<object name="prestation" type="prestation">
|
|
59
|
-
<number name="id">
|
|
60
|
-
</number>
|
|
61
|
-
<string name="libelle">
|
|
62
|
-
</string>
|
|
63
59
|
</object>
|
|
64
|
-
<string name="
|
|
60
|
+
<string name="dos_lieu" literal="">Saint-Denis</string>
|
|
65
61
|
</object>
|
|
66
62
|
<object type="dossier">
|
|
67
|
-
<number name="
|
|
68
|
-
<string name="
|
|
63
|
+
<number name="dos_id">300</number>
|
|
64
|
+
<string name="dos_libelle" literal="">dossier 300</string>
|
|
69
65
|
<object name="prestation" type="prestation">
|
|
70
|
-
<number name="id">
|
|
71
|
-
</number>
|
|
72
|
-
<string name="libelle">
|
|
73
|
-
</string>
|
|
74
66
|
</object>
|
|
75
67
|
</object>
|
|
76
68
|
<object name="dossier_vide" type="dossier">
|
|
77
|
-
<number name="
|
|
69
|
+
<number name="dos_id">
|
|
78
70
|
</number>
|
|
79
|
-
<string name="
|
|
71
|
+
<string name="dos_libelle">
|
|
80
72
|
</string>
|
|
81
73
|
<object name="prestation" type="prestation">
|
|
82
|
-
<number name="id">
|
|
83
|
-
</number>
|
|
84
|
-
<string name="libelle">
|
|
85
|
-
</string>
|
|
86
74
|
</object>
|
|
87
75
|
</object>
|
|
88
|
-
list.at(0): <number name="
|
|
89
|
-
<string name="
|
|
76
|
+
list.at(0): <number name="dos_id">1</number>
|
|
77
|
+
<string name="dos_libelle" literal="">Dossier DUPONT</string>
|
|
90
78
|
<object name="prestation" type="prestation">
|
|
91
|
-
<number name="
|
|
92
|
-
<string name="
|
|
79
|
+
<number name="pst_id">100</number>
|
|
80
|
+
<string name="pst_libelle" literal="">Prestation 2</string>
|
|
81
|
+
</object>
|
|
82
|
+
meta(dossier): <columns>
|
|
83
|
+
<number name="dos_id">
|
|
84
|
+
</number>
|
|
85
|
+
<string name="dos_libelle">
|
|
86
|
+
</string>
|
|
87
|
+
<prestation name="prestation">
|
|
88
|
+
</prestation>
|
|
89
|
+
</columns>
|
|
90
|
+
meta(dossier_remorquage): <columns>
|
|
91
|
+
<string name="dos_lieu">
|
|
92
|
+
</string>
|
|
93
|
+
</columns>
|
|
94
|
+
dos4: <number name="dos_id">
|
|
95
|
+
</number>
|
|
96
|
+
<string name="dos_libelle">
|
|
97
|
+
</string>
|
|
98
|
+
<object name="prestation" type="prestation">
|
|
99
|
+
</object>
|
|
100
|
+
pst4: <number name="pst_id">
|
|
101
|
+
</number>
|
|
102
|
+
<string name="pst_libelle">
|
|
103
|
+
</string>
|
|
104
|
+
dos4: <number name="dos_id">
|
|
105
|
+
</number>
|
|
106
|
+
<string name="dos_libelle">
|
|
107
|
+
</string>
|
|
108
|
+
<object name="prestation" type="prestation">
|
|
109
|
+
<number name="pst_id">
|
|
110
|
+
</number>
|
|
111
|
+
<string name="pst_libelle">
|
|
112
|
+
</string>
|
|
93
113
|
</object>
|
package/test/t01.xml
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
<module>
|
|
3
3
|
|
|
4
4
|
<type name="prestation">
|
|
5
|
-
<number name="
|
|
6
|
-
<string name="
|
|
5
|
+
<number name="pst_id"/>
|
|
6
|
+
<string name="pst_libelle"/>
|
|
7
7
|
</type>
|
|
8
8
|
<type name="dossier">
|
|
9
|
-
<number name="
|
|
10
|
-
<string name="
|
|
9
|
+
<number name="dos_id" />
|
|
10
|
+
<string name="dos_libelle" />
|
|
11
11
|
<object type="prestation" name="prestation" />
|
|
12
12
|
</type>
|
|
13
13
|
<type name="dossier_remorquage" base="dossier">
|
|
14
|
-
<string name="
|
|
14
|
+
<string name="dos_lieu" />
|
|
15
15
|
</type>
|
|
16
16
|
|
|
17
17
|
<function name="add" returns="c: number">
|
|
@@ -54,34 +54,34 @@
|
|
|
54
54
|
</block>
|
|
55
55
|
</function>
|
|
56
56
|
<object type="dossier" name="dos1">
|
|
57
|
-
<number name="
|
|
58
|
-
<string name="
|
|
57
|
+
<number name="dos_id">1</number>
|
|
58
|
+
<string name="dos_libelle">"Dossier DUPONT"</string>
|
|
59
59
|
</object>
|
|
60
60
|
<!-- <let name="dos1.id">1</let>
|
|
61
61
|
<let name="dos1.libelle">"DUPONT"</let> -->
|
|
62
|
-
<print>"******* Mon nom est " + dos1.
|
|
62
|
+
<print>"******* Mon nom est " + dos1.dos_libelle + " id " + dos1.dos_id</print>
|
|
63
63
|
<object type="dossier_remorquage" name="dos2">
|
|
64
|
-
<number name="
|
|
64
|
+
<number name="dos_id">2</number>
|
|
65
65
|
</object>
|
|
66
|
-
<let name="dos2.
|
|
67
|
-
<let name="dos2.
|
|
68
|
-
<print>"Dossier remorquage : " + dos2.
|
|
66
|
+
<let name="dos2.dos_libelle">"DURAND"</let>
|
|
67
|
+
<let name="dos2.dos_lieu">"Saint-Denis"</let>
|
|
68
|
+
<print>"Dossier remorquage : " + dos2.dos_libelle + " lieu " + dos2.dos_lieu</print>
|
|
69
69
|
<!-- <let name="dos1.lieu">"toto"</let> -->
|
|
70
70
|
<if>
|
|
71
|
-
<condition><![CDATA[ dos1.
|
|
71
|
+
<condition><![CDATA[ dos1.dos_id == 2 ]]></condition>
|
|
72
72
|
<then>
|
|
73
|
-
<print>"then de dos1.
|
|
73
|
+
<print>"then de dos1.dos_id == 1"</print>
|
|
74
74
|
</then>
|
|
75
|
-
<condition>dos2.
|
|
75
|
+
<condition>dos2.dos_libelle == "DURAND"</condition>
|
|
76
76
|
<then>
|
|
77
|
-
<print>"then dos2.
|
|
77
|
+
<print>"then dos2.dos_libelle == DURAND"</print>
|
|
78
78
|
</then>
|
|
79
79
|
<else>
|
|
80
80
|
<print>"CASE else"</print>
|
|
81
81
|
</else>
|
|
82
82
|
</if>
|
|
83
83
|
<block>
|
|
84
|
-
<print>"Nested block dos1.id " + dos1.
|
|
84
|
+
<print>"Nested block dos1.id " + dos1.dos_id </print>
|
|
85
85
|
</block>
|
|
86
86
|
<number name="result"/>
|
|
87
87
|
<call function="add" returns="result">
|
|
@@ -100,19 +100,19 @@
|
|
|
100
100
|
<print>"factorielle de " + Nombre + " = " + result</print>
|
|
101
101
|
<print>"factorielle de 5 : " + fact(5)</print>
|
|
102
102
|
<object type="prestation" name="pst1">
|
|
103
|
-
<number name="
|
|
104
|
-
<string name="
|
|
103
|
+
<number name="pst_id">100</number>
|
|
104
|
+
<string name="pst_libelle">"Prestation 1"</string>
|
|
105
105
|
</object>
|
|
106
106
|
<object type="prestation" name="pst2">
|
|
107
107
|
</object>
|
|
108
108
|
|
|
109
|
-
<print>"PST1 id="+pst1.
|
|
109
|
+
<print>"PST1 id="+pst1.pst_id +" libelle="+pst1.pst_libelle</print>
|
|
110
110
|
<let name="pst2">pst1</let>
|
|
111
|
-
<let name="pst2.
|
|
112
|
-
<print>"PST2 id="+pst2.
|
|
113
|
-
<print>"PST1 id="+pst1.
|
|
111
|
+
<let name="pst2.pst_libelle">"Prestation 2"</let>
|
|
112
|
+
<print>"PST2 id="+pst2.pst_id +" libelle="+pst2.pst_libelle</print>
|
|
113
|
+
<print>"PST1 id="+pst1.pst_id +" libelle="+pst1.pst_libelle</print>
|
|
114
114
|
<let name="dos1.prestation">pst1</let>
|
|
115
|
-
<print>"dos1.prestation.
|
|
115
|
+
<print>"dos1.prestation.pst_libelle = "+dos1.prestation.pst_libelle</print>
|
|
116
116
|
|
|
117
117
|
<object name="numbers">
|
|
118
118
|
<number>150</number>
|
|
@@ -168,11 +168,11 @@
|
|
|
168
168
|
<print>"total du tableau = "+total</print> -->
|
|
169
169
|
|
|
170
170
|
<object type="dossier" name="dos3">
|
|
171
|
-
<number name="
|
|
172
|
-
<string name="
|
|
171
|
+
<number name="dos_id">300</number>
|
|
172
|
+
<string name="dos_libelle">"dossier 300"</string>
|
|
173
173
|
</object>
|
|
174
174
|
|
|
175
|
-
<print>"dos3 " + dos3.
|
|
175
|
+
<print>"dos3 " + dos3.dos_id + " " + dos3.dos_libelle</print>
|
|
176
176
|
|
|
177
177
|
<string name="xml" literal=""><![CDATA[
|
|
178
178
|
<number name="id">1000</number>
|
|
@@ -239,4 +239,24 @@
|
|
|
239
239
|
|
|
240
240
|
<print>"meta(dossier): " +meta("dossier")</print>
|
|
241
241
|
<print>"meta(dossier_remorquage): " + meta("dossier_remorquage")</print>
|
|
242
|
+
|
|
243
|
+
<!-- <function name="fct">
|
|
244
|
+
<object type="type"/>
|
|
245
|
+
<block>
|
|
246
|
+
<object name="obj">newobject(type)</object>
|
|
247
|
+
<print>"obj: " + string(obj)</print>
|
|
248
|
+
</block>
|
|
249
|
+
</function> -->
|
|
250
|
+
|
|
251
|
+
<!-- <call function="fct">
|
|
252
|
+
<object name="type">gettype(prestation)</object>
|
|
253
|
+
</call> -->
|
|
254
|
+
|
|
255
|
+
<object name="dos4" type="dossier"/>
|
|
256
|
+
<object name="pst4" type="prestation"/>
|
|
257
|
+
<print>"dos4: " + string(dos4)</print>
|
|
258
|
+
<print>"pst4: " + string(pst4)</print>
|
|
259
|
+
<set name="dos4.prestation">pst4</set>
|
|
260
|
+
<print>"dos4: " + string(dos4)</print>
|
|
261
|
+
|
|
242
262
|
</module>
|
package/test/t07.xml
CHANGED
|
@@ -3,35 +3,36 @@
|
|
|
3
3
|
<print>"begin"</print>
|
|
4
4
|
<number name="jean">12345</number>
|
|
5
5
|
<type name="form"/>
|
|
6
|
-
<type name="
|
|
7
|
-
<type name="
|
|
8
|
-
<type name="
|
|
9
|
-
<type name="
|
|
10
|
-
<type name="
|
|
11
|
-
|
|
6
|
+
<type name="grid" />
|
|
7
|
+
<type name="field"/>
|
|
8
|
+
<type name="input" />
|
|
9
|
+
<type name="button" />
|
|
10
|
+
<type name="template" literal=""/>
|
|
11
|
+
|
|
12
12
|
<form name="ident_form">
|
|
13
13
|
<string name="tip">"information"</string>
|
|
14
|
-
<grid template-columns="1fr 1fr" column="1 / 3">
|
|
14
|
+
<grid grid-template-columns="1fr 1fr" grid-column="1 / 3">
|
|
15
15
|
<input model="v1"></input>
|
|
16
16
|
</grid>
|
|
17
17
|
<input model="surname" label="Surname" />
|
|
18
18
|
<input model="name" label="Name" />
|
|
19
19
|
<button label="OK" icon="done">
|
|
20
|
-
<onclick>
|
|
20
|
+
<function name="onclick">
|
|
21
|
+
<block></block>
|
|
21
22
|
<!-- <closeform/> -->
|
|
22
|
-
</
|
|
23
|
+
</function>
|
|
23
24
|
</button>
|
|
24
25
|
</form>
|
|
25
26
|
<print>"ident_form.tip " + ident_form.tip</print>
|
|
26
27
|
<form name="f1">ident_form</form>
|
|
27
28
|
<print>"f1.tip " + f1.tip</print>
|
|
28
|
-
|
|
29
|
-
<form name="form1" template-columns="auto auto">
|
|
29
|
+
|
|
30
|
+
<form name="form1" grid-template-columns="auto auto">
|
|
30
31
|
<string name="tip">"information"</string>
|
|
31
32
|
<input model="v1" bg-color="green-1" label="Label Version" stack-label="" hint="Hint info V1" autogrow=""></input>
|
|
32
33
|
<input model="v1" label="Label V1" stack-label="" hint="Hint V1" type="textarea"></input>
|
|
33
34
|
|
|
34
|
-
<grid template-columns="1fr 1fr" column="1 / 3">
|
|
35
|
+
<grid grid-template-columns="1fr 1fr" grid-column="1 / 3">
|
|
35
36
|
<input model="v1"></input>
|
|
36
37
|
</grid>
|
|
37
38
|
|
|
@@ -68,13 +69,13 @@
|
|
|
68
69
|
<input model="numb" label="Number" stack-label="" type="number"></input>
|
|
69
70
|
|
|
70
71
|
<button label="Ok" icon="event">
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
|
|
73
|
+
<function name="onclick">
|
|
74
|
+
<block>
|
|
75
|
+
<print>"toto"</print>
|
|
76
|
+
</block>
|
|
77
|
+
</function>
|
|
78
|
+
|
|
78
79
|
</button>
|
|
79
80
|
</form>
|
|
80
81
|
<print>"form1.tip " + form1.tip</print>
|
package/test/t11.xml
CHANGED
package/test/t28.output
ADDED
package/test/t28.xml
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<?xml-model href="https://www.cyklang.net/schema/cyklang.xsd" type="application/xml" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
|
2
|
+
<module>
|
|
3
|
+
|
|
4
|
+
<string name="chaine_vide"/>
|
|
5
|
+
<print>"chaine_vide: " + chaine_vide</print>
|
|
6
|
+
<if>
|
|
7
|
+
<condition>! chaine_vide </condition>
|
|
8
|
+
<then>
|
|
9
|
+
<print>"chaine_vide: " +chaine_vide</print>
|
|
10
|
+
<print>"[ ! chaine_vide ] is true"</print>
|
|
11
|
+
</then>
|
|
12
|
+
<else>
|
|
13
|
+
<print>"[ ! chaine_vide ] is false"</print>
|
|
14
|
+
</else>
|
|
15
|
+
</if>
|
|
16
|
+
|
|
17
|
+
<number name="nombre_vide">1</number>
|
|
18
|
+
<if>
|
|
19
|
+
<condition>! nombre_vide</condition>
|
|
20
|
+
<then>
|
|
21
|
+
<print>"! nombre_vide true"</print>
|
|
22
|
+
</then>
|
|
23
|
+
<else>
|
|
24
|
+
<print>"! nombre_vide false"</print>
|
|
25
|
+
</else>
|
|
26
|
+
</if>
|
|
27
|
+
</module>
|
package/test/db/test_schema.xml
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<?xml-model href="./schema.xsd"?>
|
|
2
|
-
<object>
|
|
3
|
-
<query name="q1">
|
|
4
|
-
<object name="params">
|
|
5
|
-
<number name="n"/>
|
|
6
|
-
|
|
7
|
-
</object>
|
|
8
|
-
<string name="sql" literal="">select * from table</string>
|
|
9
|
-
</query>
|
|
10
|
-
<number name="n1"/>
|
|
11
|
-
<string name="s1"/>
|
|
12
|
-
<object name="o1">
|
|
13
|
-
<number name="n2"/>
|
|
14
|
-
</object>
|
|
15
|
-
</object>
|