|
本帖最后由 zhgc 于 2019-9-8 00:47 编辑
beacon框架下对SQL模板的定义
SQL模板是框架的核心,对SQL模板的规范约定如下:
注意:
1. 除了继续支持SQL传统模板,同时引入增强SQL模板
2. 全面取消alias属性,同时引入format属性(数据格式)
以下几个类的功能意义:
report类:报表框架,输入报表ID输出报表内容
reportXml类:用于处理报表XML内容解析XML节点内容
field类:对应每一个查询面板上的查询元素
column类:处理表格的栏位
代码片段参考:
- include_once("report.inc.php");
- $report= new report($reportid);
- reportXml::FillReport($reportfile,$report);
复制代码
关于xml的文档结构
由reportXml类决定xml的文档结构,目前支持的xml入口:
title | 报表标题 | sql | 查询语句SQL模板文本 | delete | 删除语句SQL模板文本 | update | 更新语句SQL模板文本 | insert | 插入语句SQL模板文本 | templete | 报表呈现模板类型 | fields | 查询面板的查询元素 | columns | 显示表格的列属性 |
前面的都是简单的节点内容读取,重点关注fields和columns,参考以下代码片段
fields:
- foreach ($subChildNode->attributes as $attr) {
- $field->inputdata($attr);
- }
- array_push($report->Fields, $field);
复制代码
columns:
- foreach ($subChildNode->attributes as $attr) {
- $comumn->inputdata($attr);
- }
- $report->Columns[$comumn->no]=$comumn;
复制代码
关于fields的处理
inputdata函数决定了支持如下几种属性
name: 查询元素名称,同时会更新colname即栏位名称
col: 对应colname即栏位名称,控件名与数据库栏位名可以不同
operator: 操作符,=/LIKE/LLIKE/RLIKE等等
location: 替换SQL位置format:数据格式
flag: 按哪种模式处理,0为传统模式,1为第一版增强版
value:
default:
关于columns的处理
inputdata函数决定了支持如下几种属性
no: 栏位索引
color: 栏位字体颜色
align: 栏位文本对齐方式
visible: 栏位是否隐藏
title: 栏位标题
link: 栏位链接内容
html: 栏位的HTML式样
SQL的生成过程
SQL的生成过程由TransformSQL函数控制。
由flag的值来控制走向,0为传统模式,1为第一版增强模式
1. 传统模式时
传统模式时,都以operator为判断依据,支持以下几类:
LIKE | $strReplace = " AND {$Field->colname} LIKE '%{$Field->value}%' "; | LLIKE | $strReplace = " AND {$Field->colname} LIKE '{$Field->value}%' "; | RLIKE | $strReplace = " AND {$Field->colname} LIKE '%{$Field->value}' "; | IN | $strReplace = " AND {$Field->colname} IN ( ".$this->CondtionToSQL($Field->value).")"; | NULL | $strReplace = $Field->value ; | BETWEEN | $realvalue=$this->getFormatData($Field->value,$Field->format);
$strReplace=" AND {$Field->colname} BETWEEN {$realvalue}"; | END | $realvalue=$this->getFormatData($Field->value,$Field->format);
$strReplace=" AND {$realvalue}"; | = | $realvalue=$this->getFormatData($Field->value,$Field->format);
$strReplace = " AND {$Field->colname} = {$realvalue}"; | 其他 | if (strtoupper($Field->value)!="NULL"){
$strReplace = " AND {$Field->colname} {$Field->operator} '{$Field->value}'";
} else {
$strReplace = " AND {$Field->colname} IS NULL ";
} |
2. 第一版增强模式时
该模式是整段替换[变量]的方式 ,参考以下代码片段
- $realvalue=$Field->value; //默认不做任何处理
- if(strlen($Field->format)>1){
- $realvalue=$this->getFormatData($Field->value,$Field->format);
- }
- $this->SQLStatment=str_replace("[".$Field->name."]",$realvalue,$this->SQLStatment);
复制代码
系统内部支持哪些数据格式
format
DATE | $tmp=str_replace(array("/","-"),"", trim($value));
$tmp="str_to_date('{$tmp}','%Y%m%d')"; | NUMBER | $tmp=$value; | STRING | $tmp=trim($value);
$tmp="'{$tmp}'"; | TRIM | $tmp=str_replace(array("/","-"),"", trim($value));
$tmp=trim($tmp);
$tmp="'{$tmp}'"; | UPPER | $tmp=strtoupper(trim($value));
$tmp="'{$tmp}'"; | 默认 | $tmp=trim($value);
$tmp="'{$tmp}'"; |
|
|