深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 717|回复: 0
打印 上一主题 下一主题

beacon框架下对SQL模板的定义

[复制链接]

800

主题

1379

帖子

7708

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7708
跳转到指定楼层
楼主
发表于 2019-9-7 23:13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhgc 于 2019-9-8 00:47 编辑

beacon框架下对SQL模板的定义

SQL模板是框架的核心,对SQL模板的规范约定如下:

注意:
1. 除了继续支持SQL传统模板,同时引入增强SQL模板
2. 全面取消alias属性,同时引入format属性(数据格式)

以下几个类的功能意义:
report类:报表框架,输入报表ID输出报表内容
reportXml类:用于处理报表XML内容解析XML节点内容
field类:对应每一个查询面板上的查询元素
column类:处理表格的栏位

代码片段参考:
  1. include_once("report.inc.php");
  2. $report= new report($reportid);
  3. reportXml::FillReport($reportfile,$report);
复制代码


关于xml的文档结构
由reportXml类决定xml的文档结构,目前支持的xml入口:
title 报表标题
sql 查询语句SQL模板文本
delete 删除语句SQL模板文本
update 更新语句SQL模板文本
insert 插入语句SQL模板文本
templete 报表呈现模板类型
fields 查询面板的查询元素
columns 显示表格的列属性

前面的都是简单的节点内容读取,重点关注fields和columns,参考以下代码片段
fields:
  1. foreach ($subChildNode->attributes as $attr) {
  2.     $field->inputdata($attr);
  3. }
  4. array_push($report->Fields, $field);
复制代码

columns:
  1. foreach ($subChildNode->attributes as $attr) {
  2.     $comumn->inputdata($attr);
  3. }
  4. $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. 第一版增强模式时
该模式是整段替换[变量]的方式 ,参考以下代码片段
  1. $realvalue=$Field->value;  //默认不做任何处理
  2. if(strlen($Field->format)>1){
  3.      $realvalue=$this->getFormatData($Field->value,$Field->format);
  4. }
  5. $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}'";


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-5-5 09:43 , Processed in 0.025903 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表