简陋的封装了一些单表操作
源代码
template eval( A... )
{
const typeof(A[0]) eval = A[0];
}
char[] escape(char[] c){
return "\""~c~"\"";
}
char[] column_def(char[] temp){
return "typeof(this) " ~ temp ~ "(char[] v){ this.column[\"" ~ temp ~ "\"]=v;return this;}\n";
}
char[] table(char[] names)
{
char[] table="char[][char[]] column;\n";
char[] temp="";
foreach (c;names){
if(c==' '){
table ~=column_def(temp);
temp="";
}else{
temp~=c;
}
}
if(temp!="")table~=column_def(temp);
return table;
}
template Sql(char[] table_name,char[] column_list,char[] primary="id"){
//TODO:assert primary in column_list
mixin(table(column_list));
typeof(this) opAssign(T)(T t){
column=null;
foreach(k,v;t)column[k]=v;
return this;
}
char[] toString(){
char[] result=table_name~"\n";
foreach(k,v;column){
result~="\t"~k~" = "~v~"\n";
}
return result;
}
char[] save(){
if(primary in column)return update();
else return insert();
}
char[] update(){
assert(column[primary]!=null);
char[] list="";
foreach(k,v;column){
if(k!=primary)
list~=k~"="~escape(v)~",";
}
if(list!=""){
list=list[0..$-1];
}
return "UPDATE "~table_name~" SET "~list~" WHERE "~primary~"="~escape(column[primary])~";";
//UPDATE Person SET Address = 'Stien 12', City = 'Stavanger' WHERE LastName = 'Rasmussen'
}
char[] del(){
assert(column[primary]!=null);
return "DELETE FROM "~table_name~" WHERE "~primary~"="~escape(column[primary])~";";
}
char[] insert(){
char[] key_list="";
char[] value_list="";
foreach(k,v;column){
key_list~=k~",";
value_list~=escape(v)~",";
}
if(key_list!=""){
key_list=key_list[0..$-1];
value_list=value_list[0..$-1];
}
return "INSERT INTO "~table_name~"("~key_list~") VALUES("~value_list~");";
//INSERT INTO transcount_year(year, room_idx, dns_idx, redirip_id) VALUES(%d,%d,%d,%d);
}
static char[] where(char[] statement){
return "SELECT * FROM "~table_name~" WHERE "~statement~";";
}
static char[] all(){
return "SELECT * FROM "~table_name~";";
}
}
用法演示
class ErrDnameMonth{
mixin Sql!("conf_err_dname_month","id month dname dns_query_count web_hit_count");
}
void main(){
Cout(ErrDnameMonth.where("id=1")).newline.newline;
auto month=new ErrDnameMonth;
month
.month("12")
.dname("www.donews.net")
.dns_query_count("23242");
month.web_hit_count="124";
Cout(month.toString).newline.newline;
Cout(month.insert).newline.newline;
Cout(month.all).newline.newline;
Cout(month.save).newline.newline;
MysqlMgr mysql_mgr_;//假设这是一个数据库封装
Row[] rows;//取回的数据为字典格式
mysql_mgr_ = new MysqlMgr();
rows = mysql_mgr_.queryFetchAll(month.all);
foreach(r;rows){
auto em=new ErrDnameMonth;
em=r;
em.dns_query_count="23";
oo.format("{}",em.update).newline.newline;
oo.format("{}",em.del).newline.newline;
}
Cin.get();
}
分享到:
相关推荐
软件名称:SQL数据库生成器 软件版本:2.0 软件作者:梅文海 作者邮件:TQuery@163.com 软件网站:software.jinluo.com.cn 下载地址:http://software.jinluo.com.cn/download/download.asp?id=230 软件容量...
存储过程是数据库管理中的一个重要工具,它可以提高性能,减少网络流量,并提供更好的安全性。本文将详细介绍如何使用SQL语言来创建和管理存储过程,以及如何获取表的相关信息。 首先,我们要了解如何获取表的结构...
5. **SqlEntityGenerator**: 这可能是一个SQL数据库实体生成器,能够根据数据库表结构自动生成对应的C#实体类。这在ORM(对象关系映射)开发中很常见,可以极大地提高开发效率。 6. **WinP2WinCEP**: 文件名可能...
在压缩包中提到的`mssql2.exe`和`mssql 生成器`可能就是这样一个第三方工具,它可以简化.mssql文件到.sql文件的转换过程。使用这类工具时,通常需要指定数据库连接信息、选择要导出的对象以及设置脚本选项,然后工具...
yacc(Yet Another Compiler-Compiler,另一种编译器-编译器)和lex(lexical analyzer generator,词法分析器生成器)是用于生成编译器和解释器的工具,它们分别用于生成语法分析器和词法分析器。接下来,我们将...
在SQL Server中,`NEWID()`是一个内置函数,用于生成一个唯一标识符(GUID)。该函数通常用于创建唯一的记录标识,特别是在需要为表中的行提供唯一值的情况下。然而,当需要生成一系列随机数时,`NEWID()`可能不是最...
Maticsoft 自动化智能软件系列 ≡≡≡≡≡≡≡≡≡≡≡≡...此版本是一个开发中的版本,一些功能尚未彻底完成,难免有一些bug,如有问题请及时反馈。 可以发邮件至maticsoft@sohu.com 或者来 bbs.maticsoft.com交流。
下面是一个简单的Python脚本示例,用于连接到MySQL数据库并执行查询: ```python import subprocess # 使用subprocess运行HeidiSQL cmd = "heidisql -u username -p password -h localhost -d database -e 'SELECT...
- `next_extent`: 下一个区的大小,单位为KB。 - `max_extents`: 最大区数。 - `cur_ext`: 当前区数。 #### 四、查看某个回滚段里面正在执行的事物或SQL语句 该SQL语句用于监控某个特定回滚段内的活动,如正在执行...
在SQL语言中,视图(View)是一种虚拟表,它并不实际存储数据,而是通过一个SELECT语句来定义,这个语句可以从一个或多个实际存在的表中选择数据。视图的作用在于提供了一种数据抽象的方式,可以简化复杂的查询,...
### 实验五-SQL语言知识点解析 #### 一、实验目的与要求 1. **掌握SQL语言的查询功能**: - SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言。 - 查询功能是SQL的核心之一,通过SELECT...
例如,下列路径值为“C:\Program Files (x86)\”的脚本将生成一个错误,因为 shell 脚本解释器会将扩展的 PATH 变量中的括号错误地解释为 IF/ELSE 语句的一部分: IF "%SOME_PATH%" == "" ( SET PATH=%PATH%;%...
#### 一、SQL 语句整理大全 **1. 查看某个回滚段中的事务或SQL语句** - **语法:** ```sql SQL> SELECT D.SQL_TEXT, A.NAME FROM V$ROLLNAME A, V$TRANSACTION B, V$SESSION C, V$SQLTEXT D WHERE A.USN = B....
LR(1)和LALR(1)分别代表“Look-Ahead Left-to-Right”分析器,其中的数字1表示分析器在做出决策时会查看一个额外的输入符号。 1. **LR(1)**:在每个状态,LR(1)分析器会考虑当前的输入符号和下一个符号的前缀,以此...
### SQLOracle21天自学通 #### 第一天:SQL简介 ...通过上述知识点的学习,读者将对SQL Oracle有一个全面的理解,并能够掌握基本的SQL查询技巧。这些基础知识对于后续深入学习高级功能和技术至关重要。
SQL生成器 包构建器是用于Go和XORM的轻量级且快速SQL构建器。 确保已安装Go 1.8+,然后: go get github.com/go-xorm/builder插sql , args , err := builder . Insert ( Eq { "c" : 1 , "d" : 2 }). Into ( "table1...
- **SHIFT+F2**: 在编辑器中查找下一个匹配项。 - **ALT+BREAK**: 将当前窗口拆分为两个窗口,方便同时查看多个部分。 - **CTRL+O**: 打开一个已存在的文件。 - **CTRL+F4**: 关闭当前活动的窗口。 - **CTRL+F4**: ...
- **选项D**: 创建一个应用程序,此应用程序使用SQL_DM_O提取数据库的数据并把这些数据转换为标准电子数据交换(EDI)文件。EDI文件是一种专门用于业务交易的标准格式,但在这种情况下可能过于复杂且不够灵活。 **...