backend-plus 2.0.0-rc.16 → 2.0.0-rc.18
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/for-client/my-tables.js +11 -16
- package/lib/backend-plus.d.ts +1 -1
- package/lib/backend-plus.js +16 -6
- package/lib/procedures-table.js +3 -0
- package/package.json +2 -2
package/for-client/my-tables.js
CHANGED
|
@@ -183,20 +183,15 @@ myOwn.i18n.messages.es=changing(myOwn.i18n.messages.es, {
|
|
|
183
183
|
/** @param {string} text */
|
|
184
184
|
function regex4search(text){
|
|
185
185
|
return new RegExp(
|
|
186
|
-
text.trim().replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
|
|
186
|
+
text.toString().trim().replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
|
|
187
187
|
// .replace(/"/g,"\\b")
|
|
188
188
|
.replace(/[ñÑ]/g,'(?:gn|nn?i?|[ñÑ])')
|
|
189
|
-
.replace(/[cCçÇ]/g,'[
|
|
190
|
-
.replace(/[
|
|
191
|
-
.replace(/[
|
|
192
|
-
.replace(/[
|
|
193
|
-
.replace(/[
|
|
194
|
-
.replace(/[
|
|
195
|
-
.replace(/a/gi,'[AáÁàÀäÄãÃ]')
|
|
196
|
-
.replace(/e/gi,'[EéÉèÈëË]')
|
|
197
|
-
.replace(/i/gi,'[IíÍìÌïÏ]')
|
|
198
|
-
.replace(/o/gi,'[OóÓòÒöÖõÕ]')
|
|
199
|
-
.replace(/u/gi,'[UúÚùÙüÜ]')
|
|
189
|
+
.replace(/[cCçÇ]/g,'[cCçÇ]')
|
|
190
|
+
.replace(/[AáÁàÀäÄãÃ]/gi,'[AáÁàÀäÄãÃ]')
|
|
191
|
+
.replace(/[EéÉèÈëË]/gi,'[EéÉèÈëË]')
|
|
192
|
+
.replace(/[IíÍìÌïÏ]/gi,'[IíÍìÌïÏ]')
|
|
193
|
+
.replace(/[OóÓòÒöÖõÕ]/gi,'[OóÓòÒöÖõÕ]')
|
|
194
|
+
.replace(/[UúÚùÙüÜ]/gi,'[UúÚùÙüÜ]')
|
|
200
195
|
// .replace(/\s+/g,'.*\\s+.*') mas estricto, exige el espacio
|
|
201
196
|
.replace(/\s+/g,'.*')
|
|
202
197
|
, 'i');
|
|
@@ -212,9 +207,9 @@ myOwn.comparatorParameterNull={
|
|
|
212
207
|
'!=\u2205':true,
|
|
213
208
|
}
|
|
214
209
|
myOwn.comparator={
|
|
215
|
-
'=':function(valueToCheck,condition){return valueToCheck
|
|
216
|
-
'~':function(valueToCheck,condition){return condition==null ||
|
|
217
|
-
'!~':function(valueToCheck,condition){return condition==null ||
|
|
210
|
+
'=':function(valueToCheck,condition){return sameValue(valueToCheck,condition);},
|
|
211
|
+
'~': function(valueToCheck,condition){return condition==null || condition instanceof Date ? Math.abs(condition-valueToCheck) <= 1000*60*60*24 : regex4search(condition).test(valueToCheck);},
|
|
212
|
+
'!~':function(valueToCheck,condition){return condition==null || condition instanceof Date ? Math.abs(condition-valueToCheck) > 1000*60*60*24 :!regex4search(condition).test(valueToCheck);},
|
|
218
213
|
'/R/i':function(valueToCheck,condition){return condition==null || RegExp(condition,'i').test(valueToCheck);},
|
|
219
214
|
'\u2205':function(valueToCheck,condition){return valueToCheck == null;},//\u2205 = conjunto vacío
|
|
220
215
|
'!=\u2205':function(valueToCheck,condition){return valueToCheck != null;},//\u2205 = conjunto vacío
|
|
@@ -1005,7 +1000,7 @@ myOwn.DataColumnGrid.prototype.thFilter = function thFilter(depot, iColumn){
|
|
|
1005
1000
|
var grid = this.grid;
|
|
1006
1001
|
var fieldDef = this.fieldDef;
|
|
1007
1002
|
var fieldName=fieldDef.name;
|
|
1008
|
-
depot.rowSymbols[fieldDef.name]=depot.rowSymbols[fieldDef.name]||'~';
|
|
1003
|
+
depot.rowSymbols[fieldDef.name]=depot.rowSymbols[fieldDef.name]||(fieldDef.typeName == 'text' ? '~' : '=');
|
|
1009
1004
|
var filterImage=my.path.img+my.comparator.traductor[depot.rowSymbols[fieldDef.name]]+'.png';
|
|
1010
1005
|
var th=html.td(this.cellAttributes({class:"autoFilter", "typed-controls-direct-input":true},{skipMandatory:true})).create();
|
|
1011
1006
|
var symbolFilter=th;
|
package/lib/backend-plus.d.ts
CHANGED
|
@@ -184,7 +184,7 @@ export type FieldDefinition = EditableDbDefinition & {
|
|
|
184
184
|
serverSide?:boolean /* default:!clientSide if the value is retrived from the database */
|
|
185
185
|
inTable?:boolean /* default:!clientSide && !sql.fields[...].expr. Is a real fisical field in the table */
|
|
186
186
|
/* sizeByte?:number deprecated size in bytes for numbers */
|
|
187
|
-
|
|
187
|
+
allowEmptyText?:boolean /* if a text field accepts '' as a valid value */
|
|
188
188
|
mobileInputType?:string
|
|
189
189
|
extraRow?:number
|
|
190
190
|
inexactNumber?:number /* default:depends on typeName if = means abs(x-v)<espilon
|
package/lib/backend-plus.js
CHANGED
|
@@ -2978,22 +2978,32 @@ AppBackend.prototype.dumpDbSchemaPartial = async function dumpDbSchemaPartial(pa
|
|
|
2978
2978
|
lines[0][0]=lines[0][0].replace('\ufeff','')
|
|
2979
2979
|
}
|
|
2980
2980
|
rows=lines.slice(1);
|
|
2981
|
+
var filteredFieldDef = lines[0].filter(filterField);
|
|
2981
2982
|
if(tablesWithStrictSequence[tableName]){
|
|
2982
2983
|
var dataString="COPY "+db.quoteIdent(tableName)+" ("+
|
|
2983
|
-
|
|
2984
|
+
filteredFieldDef.map(db.quoteIdent).join(', ')+
|
|
2984
2985
|
') FROM stdin;\n'+
|
|
2985
2986
|
rows.map(function(line){
|
|
2986
|
-
return line.filter(function(_,i){ return filterField(lines[0][i]);}).map(function(value){
|
|
2987
|
-
|
|
2987
|
+
return line.filter(function(_,i){ return filterField(lines[0][i]);}).map(function(value,i){
|
|
2988
|
+
var def = tableDef.field[filteredFieldDef[i]];
|
|
2989
|
+
return value==='' ? (
|
|
2990
|
+
def.allowEmptyText && ('nullable' in def) && !def.nullable ? '' : '\\N'
|
|
2991
|
+
): value.replace(/\\/g,'\\\\').replace(/\t/g,'\\t').replace(/\n/g,'\\n').replace(/\r/g,'\\r');
|
|
2988
2992
|
}).join('\t')+'\n';
|
|
2989
2993
|
}).join('')+'\\.\n';
|
|
2990
2994
|
}else{
|
|
2991
2995
|
var dataString="insert into "+db.quoteIdent(tableName)+" ("+
|
|
2992
|
-
|
|
2996
|
+
filteredFieldDef.map(db.quoteIdent).join(', ')+
|
|
2993
2997
|
') values\n'+
|
|
2994
2998
|
rows.map(function(line){
|
|
2995
|
-
return "("+line.filter(function(_,i){ return filterField(lines[0][i]);}).map(function(value){
|
|
2996
|
-
|
|
2999
|
+
return "("+line.filter(function(_,i){ return filterField(lines[0][i]);}).map(function(value,i){
|
|
3000
|
+
var def = tableDef.field[filteredFieldDef[i]];
|
|
3001
|
+
if(def == null) {
|
|
3002
|
+
throw Error("no se encuentra la columna "+filteredFieldDef[i]+" en "+tableName);
|
|
3003
|
+
}
|
|
3004
|
+
return value==='' ? (
|
|
3005
|
+
def.allowEmptyText && ('nullable' in def) && !def.nullable ? "''" : 'null'
|
|
3006
|
+
) : db.quoteNullable(value);
|
|
2997
3007
|
}).join(', ')+")";
|
|
2998
3008
|
}).join(',\n')+';\n';
|
|
2999
3009
|
}
|
package/lib/procedures-table.js
CHANGED
|
@@ -823,6 +823,9 @@ ProcedureTables = [
|
|
|
823
823
|
if(value != null && parameters.skipUnknownFieldsAtImport){
|
|
824
824
|
value = value.replace(/(\s|\u00A0)+/g,' ').trim()
|
|
825
825
|
}
|
|
826
|
+
if (value == null && field.allowEmptyText && ('nullable' in field) && !field.nullable ) {
|
|
827
|
+
value = ''
|
|
828
|
+
}
|
|
826
829
|
newRow[field.name]=value;
|
|
827
830
|
}
|
|
828
831
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "backend-plus",
|
|
3
3
|
"description": "Backend for the anti Pareto rule",
|
|
4
|
-
"version": "2.0.0-rc.
|
|
4
|
+
"version": "2.0.0-rc.18",
|
|
5
5
|
"author": "Codenautas <codenautas@googlegroups.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": "codenautas/backend-plus",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"@types/js-yaml": "^4.0.9",
|
|
83
83
|
"@types/mocha": "^10.0.6",
|
|
84
84
|
"@types/multiparty": "~0.0.36",
|
|
85
|
-
"@types/node": "^20.
|
|
85
|
+
"@types/node": "^20.14.0",
|
|
86
86
|
"@types/nodemailer": "^6.4.15",
|
|
87
87
|
"@types/numeral": "~2.0.5",
|
|
88
88
|
"@types/session-file-store": "^1.2.5",
|