@cyklang/cli 0.9.3 → 0.11.0

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.
@@ -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 objectMeta = (objXmlResult.variables.getData('meta'));
85
- if (objectMeta === undefined)
82
+ const metaObject = (objXmlResult.variables.getData('meta'));
83
+ if (metaObject === undefined)
86
84
  throw 'objectMeta not found';
87
- const xmlMeta = objectMeta.variables.getString(tableName);
88
- if (xmlMeta === undefined)
89
- throw 'meta does not have ' + tableName + ' description';
90
- const tagDBTable = (0, core_1.parseXML)('dbTable', xmlMeta);
91
- const dbTable = new core_1.DBTable(tagDBTable);
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 = dbTable.columns.filter((dbColumn) => dbColumn.name === field)[0];
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(tableName);
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++) {
@@ -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
- TableCommand_1.logger.debug('commandQuery', table);
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.9.3",
3
+ "version": "0.11.0",
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.6.6",
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/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 objectMeta = (objXmlResult.variables.getData('meta')) as ObjectData
92
- if (objectMeta === undefined) throw 'objectMeta not found'
93
- const xmlMeta = objectMeta.variables.getString(tableName)
94
- if (xmlMeta === undefined) throw 'meta does not have ' + tableName + ' description'
95
-
96
- const tagDBTable = parseXML('dbTable', xmlMeta)
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 = dbTable.columns.filter((dbColumn) => dbColumn.name === field)[0]
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(tableName) as ObjectData
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
@@ -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
  }
@@ -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('commandQuery', table);
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) {
@@ -1,23 +1,4 @@
1
1
  New film ID 1
2
- films_actors.resultset.at(0).t_actor.last_name CHANE YOU KAYE
3
- actor 1 Maria CHANE YOU KAYE, film 1 La mélodie du bonheur
4
- string(films_actors.resultset) : <object>
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" type="int" primary="" generated='by default'/>
6
- <string name="first_name" type="varchar(50)"/>
7
- <string name="last_name" type="text" />
8
- <datetime name="last_update" type="timestamp with time zone"/>
9
- <string name="cyk_remark" type="varchar(255)" />
10
- <boolean name="cyk_disable" type="boolean"/>
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" type="int" primary="" generated='by default'/>
15
- <string name="title" type="varchar(255)" />
16
- <string name="description" type="text" />
17
- <number name="release_year" type="int"/>
18
- <number name="length" type="int" />
19
- <number name="language_id" type="int"/>
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" type="int" primary="" generated="by default"/>
24
- <number name="actor_id" type="int"/>
25
- <number name="film_id" type="int"/>
26
- <number name="length" type="int"/>
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 * FROM public.t_actor
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'>'CHANE YOU KAYE'</string>
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).t_actor.last_name " + films_actors.resultset.at(0).t_actor.last_name</print>
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.t_actor.actor_id + " " + result.t_actor.first_name + " " + result.t_actor.last_name
120
- + ", film " + result.t_film.film_id + " " + result.t_film.title
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 * FROM public.t_actor
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 }}
@@ -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>
@@ -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="">CHANE YOU KAYE</string>
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
@@ -28,4 +28,9 @@
28
28
  </block>
29
29
  </function>
30
30
 
31
+ <type name="Dossier">
32
+ <number name="id"/>
33
+ <string name="libelle"/>
34
+ </type>
35
+
31
36
  </module>
@@ -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.t_actor</object>
13
+ <object name="t_actor">result_t_actor.resultset</object>
14
14
  <object name="meta">
15
- <string name="t_actor">result_t_actor.meta.t_actor</string>
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
@@ -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
@@ -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="dossier">
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
- <dossier name="dos1" />
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.libelle == DURAND
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.libelle = Prestation 2
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 id, value 100
45
- name libelle, value Prestation 2
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="id">1</number>
49
- <string name="libelle" literal="">Dossier DUPONT</string>
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="id">100</number>
52
- <string name="libelle" literal="">Prestation 2</string>
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="id">2</number>
57
- <string name="libelle" literal="">DURAND</string>
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="lieu" literal="">Saint-Denis</string>
60
+ <string name="dos_lieu" literal="">Saint-Denis</string>
65
61
  </object>
66
62
  <object type="dossier">
67
- <number name="id">300</number>
68
- <string name="libelle" literal="">dossier 300</string>
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="id">
69
+ <number name="dos_id">
78
70
  </number>
79
- <string name="libelle">
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="id">1</number>
89
- <string name="libelle" literal="">Dossier DUPONT</string>
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="id">100</number>
92
- <string name="libelle" literal="">Prestation 2</string>
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="id"/>
6
- <string name="libelle"/>
5
+ <number name="pst_id"/>
6
+ <string name="pst_libelle"/>
7
7
  </type>
8
8
  <type name="dossier">
9
- <number name="id" />
10
- <string name="libelle" />
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="lieu" />
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="id">1</number>
58
- <string name="libelle">"Dossier DUPONT"</string>
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.libelle + " id " + dos1.id</print>
62
+ <print>"******* Mon nom est " + dos1.dos_libelle + " id " + dos1.dos_id</print>
63
63
  <object type="dossier_remorquage" name="dos2">
64
- <number name="id">2</number>
64
+ <number name="dos_id">2</number>
65
65
  </object>
66
- <let name="dos2.libelle">"DURAND"</let>
67
- <let name="dos2.lieu">"Saint-Denis"</let>
68
- <print>"Dossier remorquage : " + dos2.libelle + " lieu " + dos2.lieu</print>
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.id == 2 ]]></condition>
71
+ <condition><![CDATA[ dos1.dos_id == 2 ]]></condition>
72
72
  <then>
73
- <print>"then de dos1.id == 1"</print>
73
+ <print>"then de dos1.dos_id == 1"</print>
74
74
  </then>
75
- <condition>dos2.libelle == "DURAND"</condition>
75
+ <condition>dos2.dos_libelle == "DURAND"</condition>
76
76
  <then>
77
- <print>"then dos2.libelle == DURAND"</print>
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.id </print>
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="id">100</number>
104
- <string name="libelle">"Prestation 1"</string>
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.id +" libelle="+pst1.libelle</print>
109
+ <print>"PST1 id="+pst1.pst_id +" libelle="+pst1.pst_libelle</print>
110
110
  <let name="pst2">pst1</let>
111
- <let name="pst2.libelle">"Prestation 2"</let>
112
- <print>"PST2 id="+pst2.id +" libelle="+pst2.libelle</print>
113
- <print>"PST1 id="+pst1.id +" libelle="+pst1.libelle</print>
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.libelle = "+dos1.prestation.libelle</print>
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="id">300</number>
172
- <string name="libelle">"dossier 300"</string>
171
+ <number name="dos_id">300</number>
172
+ <string name="dos_libelle">"dossier 300"</string>
173
173
  </object>
174
174
 
175
- <print>"dos3 " + dos3.id + " " + dos3.libelle</print>
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="form.grid" />
7
- <type name="form.field"/>
8
- <type name="form.input" />
9
- <type name="form.button" />
10
- <type name="form.onclick"/>
11
- <type name="form.template" literal=""/>
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
- </onclick>
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
- <onclick>
72
- <function>
73
- <block>
74
- <print>"toto"</print>
75
- </block>
76
- </function>
77
- </onclick>
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
@@ -1,4 +1,4 @@
1
- <?xml-model href="cyklang.xsd" ?>
1
+ <?xml-model href="https://www.cyklang.net/schema/cyklang.xsd" ?>
2
2
  <module>
3
3
  <type name="point">
4
4
  <number name="x">0</number>
@@ -0,0 +1,4 @@
1
+ chaine_vide: undefined
2
+ chaine_vide: undefined
3
+ [ ! chaine_vide ] is true
4
+ ! nombre_vide false
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>
@@ -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>