diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java b/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java index 54c96784..faa5e6e0 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java @@ -222,7 +222,6 @@ public class MagicWorkbenchController extends MagicController implements MagicEx } } } catch (Exception ignored) { - ignored.printStackTrace(); } } diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java b/magic-api/src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java index 074978b3..d5e4c738 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java @@ -36,6 +36,8 @@ public class NamedTable { Object defaultPrimaryValue; + boolean useLogic = false; + Where where = new Where(this); public NamedTable(String tableName, SQLModule sqlModule, Function rowMapColumnMapper) { @@ -46,6 +48,12 @@ public class NamedTable { this.logicDeleteValue = sqlModule.getLogicDeleteValue(); } + @Comment("使用逻辑删除") + public NamedTable logic(){ + this.useLogic = true; + return this; + } + @Comment("设置主键名,update时使用") public NamedTable primary(String primary) { return primary(primary, null); @@ -151,8 +159,13 @@ public class NamedTable { return sqlModule.insert(new BoundSql(builder.toString(), entries.stream().map(Map.Entry::getValue).collect(Collectors.toList()), sqlModule), this.primary); } - @Comment("执行delete语句(物理删除)") + @Comment("执行delete语句") public int delete() { + if(useLogic){ + Map dataMap = new HashMap<>(); + dataMap.put(logicDeleteColumn, logicDeleteValue); + return update(dataMap); + } if (where.isEmpty()) { throw new MagicAPIException("delete语句不能没有条件"); } @@ -163,20 +176,6 @@ public class NamedTable { return sqlModule.update(new BoundSql(builder.toString(), where.getParams(), sqlModule)); } - @Comment("执行delete语句") - public int delete(@Comment("是否逻辑删除") boolean isLogicDelete) { - if (where.isEmpty()) { - throw new MagicAPIException("delete语句不能没有条件"); - } - if (!isLogicDelete) { - return delete(); - } else { - Map dataMap = new HashMap<>(); - dataMap.put(logicDeleteColumn, logicDeleteValue); - return update(dataMap); - } - } - @Comment("保存到表中,当主键有值时则修改,否则插入") public Object save() { return this.save(null, false); @@ -227,26 +226,12 @@ public class NamedTable { return sqlModule.select(buildSelect()); } - @Comment("执行`select`查询") - public List> select(@Comment("排除无效数据") boolean excludeInvalid) { - return sqlModule.select(buildSelect(excludeInvalid)); - } - @Comment("执行`selectOne`查询") public Map selectOne() { return sqlModule.selectOne(buildSelect()); } - @Comment("执行`selectOne`查询") - public Map selectOne(@Comment("排除无效数据") boolean excludeInvalid) { - return sqlModule.selectOne(buildSelect(excludeInvalid)); - } - private BoundSql buildSelect() { - return buildSelect(false); - } - - private BoundSql buildSelect(boolean excludeInvalid) { StringBuilder builder = new StringBuilder(); builder.append("select "); if (this.fields.isEmpty()) { @@ -256,7 +241,7 @@ public class NamedTable { } builder.append(" from ").append(tableName); List params = new ArrayList<>(); - where.and(excludeInvalid, it -> where.ne(logicDeleteColumn, logicDeleteValue)); + where.and(useLogic, it -> where.ne(logicDeleteColumn, logicDeleteValue)); if (!where.isEmpty()) { where.and(); builder.append(where.getSql()); @@ -278,11 +263,6 @@ public class NamedTable { return sqlModule.page(buildSelect()); } - @Comment("执行分页查询") - public Object page(@Comment("排除无效数据") boolean excludeInvalid) { - return sqlModule.page(buildSelect(excludeInvalid)); - } - @Comment("执行update语句") public int update() { return update(null); diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/modules/table/Where.java b/magic-api/src/main/java/org/ssssssss/magicapi/modules/table/Where.java index 78710ad6..109d8328 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/modules/table/Where.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/modules/table/Where.java @@ -385,14 +385,11 @@ public class Where { return namedTable.delete(); } - @Comment("执行delete语句") - public int delete(@Comment("是否逻辑删除")boolean isLogicDelete) { - return namedTable.delete(isLogicDelete); - } @Comment("执行update语句") public int update(@Comment("各项列和值") Map data) { return namedTable.update(data); } + @Comment("执行update语句") public int update(@Comment("各项列和值") Map data,@Comment("是否更新空值字段") boolean isUpdateBlank) { return namedTable.update(data,isUpdateBlank); @@ -401,24 +398,14 @@ public class Where { public Object page() { return namedTable.page(); } - @Comment("执行分页查询") - public Object page(@Comment("排除无效数据") boolean excludeInvalid) { - return namedTable.page(); - } + @Comment("执行select查询") public List> select() { return namedTable.select(); } - @Comment("执行select查询") - public List> select(@Comment("排除无效数据") boolean excludeInvalid) { - return namedTable.select(excludeInvalid); - } + @Comment("执行selectOne查询") public Map selectOne() { return namedTable.selectOne(); } - @Comment("执行selectOne查询") - public Map selectOne(@Comment("排除无效数据") boolean excludeInvalid) { - return namedTable.selectOne(excludeInvalid); - } } diff --git a/magic-editor/src/console/src/scripts/editor/java-class.js b/magic-editor/src/console/src/scripts/editor/java-class.js index 1556f0f1..9f45730e 100644 --- a/magic-editor/src/console/src/scripts/editor/java-class.js +++ b/magic-editor/src/console/src/scripts/editor/java-class.js @@ -179,11 +179,18 @@ const findMethods = (clazz, sort) => { const getExtension = (clazz) => { return extensions[clazz] } - -async function loadClass(className) { +const findClass = (className) => { if (!className) { throw new Error('className is required'); } + let value = scriptClass[className] + if(!value){ + let index = importClass.findIndex(it => it === className) + value = importClass[index] + } + return value +} +async function loadClass(className) { let val = scriptClass[className]; if (!val) { try { @@ -248,6 +255,7 @@ const exportValue = { findMethods, findFunction, loadClass, + findClass, initClasses, initImportClass, getWrapperClass, diff --git a/magic-editor/src/console/src/scripts/parsing/ast.js b/magic-editor/src/console/src/scripts/parsing/ast.js index dcd02cf0..bfa34a0d 100644 --- a/magic-editor/src/console/src/scripts/parsing/ast.js +++ b/magic-editor/src/console/src/scripts/parsing/ast.js @@ -134,7 +134,15 @@ class VariableAccess extends Node { } async getJavaType(env) { - return (env && env[this.variable]) || 'java.lang.Object'; + // @import + let value = (env && env[this.variable]); + if(!value){ + let imports = env['@import'] + for(let i = imports.length - 1; i >= 0 && !value; i--){ + value = JavaClass.findClass(imports[i] + this.variable); + } + } + return value|| 'java.lang.Object'; } } @@ -241,7 +249,15 @@ class NewStatement extends Node { } async getJavaType(env) { - return env[this.identifier] || 'java.lang.Object'; + let value = env[this.identifier]; + if(!value){ + let imports = env['@import'] + for(let i = imports.length - 1; i >= 0 && !value; i--){ + value = JavaClass.findClass(imports[i] + this.identifier); + } + console.log(imports,this.identifier, value) + } + return value|| 'java.lang.Object'; } } @@ -422,8 +438,8 @@ class BinaryOperation extends Node { } async getJavaType(env) { - var lType = await this.left.getJavaType(env); - var rType = await this.right.getJavaType(env); + let lType = await this.left.getJavaType(env); + let rType = await this.right.getJavaType(env); if (this.operator.type == TokenType.Plus || this.operator.type == TokenType.PlusEqual) { if (lType == 'string' || rType == 'string' || lType == 'java.lang.String' || rType == 'java.lang.String') { return 'java.lang.String'; diff --git a/magic-editor/src/console/src/scripts/parsing/parser.js b/magic-editor/src/console/src/scripts/parsing/parser.js index ca6d5117..a748615a 100644 --- a/magic-editor/src/console/src/scripts/parsing/parser.js +++ b/magic-editor/src/console/src/scripts/parsing/parser.js @@ -35,7 +35,7 @@ import { LanguageExpression } from './ast.js' -export const keywords = ["import", "as", "var", "return", "break", "continue", "if", "for", "in", "new", "true", "false", "null", "else", "try", "catch", "finally", "async", "while"]; +export const keywords = ["import", "as", "var", "return", "break", "continue", "if", "for", "in", "new", "true", "false", "null", "else", "try", "catch", "finally", "async", "while", "exit", "and", "or"]; export const linqKeywords = ["from", "join", "left", "group", "by", "as", "having", "and", "or", "in", "where", "on"]; const binaryOperatorPrecedence = [ [TokenType.Assignment], @@ -688,12 +688,13 @@ export class Parser { let env = { ...defineEnvironment, ...JavaClass.getAutoImportClass(), - ...JavaClass.getAutoImportModule() + ...JavaClass.getAutoImportModule(), + '@import' : [] } let expression; while (this.stream.hasMore()) { let token = this.stream.consume(); - var index = this.stream.makeIndex(); + let index = this.stream.makeIndex(); try { if (token.type === TokenType.Identifier && token.getText() === 'var') { let varName = this.stream.consume().getText(); @@ -724,7 +725,9 @@ export class Parser { varName = value.substring(index + 1) } } - if (varName) { + if(value.endsWith(".*")){ + env['@import'].push(value.substring(0,value.length - 1)) + }else if (varName) { env[varName] = value; } } else if (token.getTokenType() === TokenType.Assignment) { @@ -751,7 +754,7 @@ export class Parser { } async completion(env) { - var type = await this.preprocessComplection(true, env || {}); + let type = await this.preprocessComplection(true, env || {}); return await JavaClass.loadClass(type); }