返回SQL方言以及SQL日志
最后更新:2024-03-26 10:57:47
|
状态:未完成
在SQL执行过程中,在控制台或日志文件中会生成带占位符的日志。
如果需要在执行完成后返回SQL,可以在service调用的方法中添加ConfigStore参数
在执行完成后从ConfigStore中获取执行的SQL,
因为执行的SQL可能是多条,所以会返回一个List<Run>集合,
默认情况下Run中的SQL是带占位符的,与占位值分开存储
从一种库(mysql)复制表结构到另一种库(pg),参考【异构数据源迁移核心部分代码Mysql到Apache Ignite|VoltDB】
如果需要在执行完成后返回SQL,可以在service调用的方法中添加ConfigStore参数
在执行完成后从ConfigStore中获取执行的SQL,
因为执行的SQL可能是多条,所以会返回一个List<Run>集合,
默认情况下Run中的SQL是带占位符的,与占位值分开存储
List<Run> runs = configs.runs(); for (Run run:runs){ System.out.println("无占位符 sql:"+run.getFinalQuery(false)); System.out.println("有占位符 sql:"+run.getFinalQuery()); System.out.println("占位values:"+run.getValues()); }
如果要处理全局日志,可以通过DMLister DDListner以及org.anyline.data.interceptor下的拦截器
如果只需要生成SQL,但不执行,可以调用相应的adapter.buildQueryRun/buildDeleteRun 返回的Run与以上操作相同
因为adapter平时不常用,所以许多人对此不太熟悉,也可以在ConfigStore上调用execute(false)方法
然后调用service.querys()时提供这个ConfigStore这样querys执行后实际SQL并没有执行,但configs.runs可以返回生成的SQL
DataRow row = new DataRow(); row.put("name","zh"+System.currentTimeMillis()); service.insert(table, row); ConfigStore configs = new DefaultConfigStore().execute(false);//false表示最后实际操作数据库的一步不执行 DataSet set = service.querys(table, configs); System.out.println(set);//因为最后一步没有执行,所以这里应该输出空集合 List<Run> runs = configs.runs(); for (Run run:runs){ System.out.println("无占位符 sql:"+run.getFinalQuery(false)); System.out.println("有占位符 sql:"+run.getFinalQuery()); System.out.println("占位values:"+run.getValues()); }DDL也类似,因为DDL执行过程中有元数据的对象所以execute(false)在metadata(table/column等)上执行
Table table = service.metadata().table("sso_user"); //获取表结构 table.execute(false);//不执行SQL service.ddl().create(table); List<String> ddls = table.ddls(); //返回创建表的DDL
从一种库(mysql)复制表结构到另一种库(pg),参考【异构数据源迁移核心部分代码Mysql到Apache Ignite|VoltDB】
先从mysql数据源获取表结构,再用pg数据源保存表结构,如果只是生成PG SQL而不执行,可以在调用ddl方法前先执行table.execute(false)
Table table = ServiceProxy.service("mysql数据源key").metadata().table("SSO_USER"); table.execute(false); ServiceProxy.service("pg数据源key").ddl().create(table); List<String> sqls = table.ddls();