SQL::Translator 学习

本文介绍SQL::Translator,一个以SQL为中心的转换工具,能够实现SQL与Schema、Database、ER图之间的转换。文中详细解释了其核心方法,如producer和parser的功能,并通过实例展示了如何使用该工具将XML配置文件转换为数据模型。
摘要由CSDN通过智能技术生成
 SQL::Translator 一个以SQL为中心的转换工具,可以实现SQL<->Schema, SQL<->Database, SQL<->ER等各种转换。
CPAN文档:http://search.cpan.org/~kclark/SQL-Translator-0.07/lib/SQL/Translator.pm

 SQL :: Translator包的方法列表:
    
*   add_drop_table
    
*  no_comments
    
*  producer
    
*  parser
    
*  filters
    
*  show_warnings
    
*  translate
    
*  filename ,  data
    
*  schema
    
*  trace
    
*  validate
    
*  version 


producer 将SQL::Translator的中间对象(schema)输出为各种不同的目的对象。
传入一个参数。$tr 为SQL::Translator对象。
sub  produce {
my   $tr       =   shift ;
my   $schema   =   $tr -> schema;  # 取得schema对象。然后解析输出。schema的数据由parser构建.
my   $output   =   '' ;
for   my   $t  (  $schema -> get_tables ) {
  
$output   .=   join ( '' ,   " Table =  " ,   $t -> name ,   " " );
}
return   $output ;
}


parser 将输入数据,转换为SQL::Translator. 在parser调用时传入两个参数。
$tr 一个SQL::Translator 实例.
$data 要解析的数据,传入方式为: $t->translate( $input ) 注,$t为SQL::Translator对象。
sub  parser {
my  (  $tr ,   $data  )  =   @_ ;
my   $schema   =   $tr -> schema;     # 从$tr取得schema对象,让后把解析后的数据,填入schema对象等待producer转换。

for   my   $line  (  split / n /,   $data  ) ) {
  
my  (  $table_name ,   @fields  )  =   split /:/,   $line  );
  
my   $table   =   $schema -> add_table( name  =>   $table_name  )
      or 
die   $schema -> error;
  
for  (  @fields  ) {
      
my  (  $f_name ,   $type ,   $size  )  =   split ;
      
$table -> add_field(
      name      
=>   $f_name ,
      data_type 
=>   $type ,
      size      
=>   $size ,
      ) or 
die   $table -> error;
  }
}

return   1 ;
}


SQL::Translator::Schema 中间对象类。
http://search.cpan.org/~kclark/SQL-Translator-0.07/lib/SQL/Translator/Schema.pm

使用SQL::Translator实现xml配置文件到数据模型的转换。
1.可以根据业务进行建模分析数据模型以xml方式保存,
2.将xml文件转换为DBIx::Class的schema文件。*
3.将xml文件转换为sql script。
xml如下:
profile.xml
< node  table ="profile" >
    
< string  name ="name"   />
    
< string  name ="password"   />
</ node >

password.xml
< node  table ="profile" >
    
< string  name ="password"   />
</ node >

问题:怎么实现xml->到schema的转换。因为输入后的xml将转换为中间对象(schema)。在输入的时候只能以中间对象(schema)为基础,不能记录之前的xml文件名。这样将不能实现同一个表在多个xml配置使用的情况。

关于SQL::Translator的设计。
1. 可以用于一些数据转换程序的设计。设计核心是定义一个完善的中间对象。中间对象的设计的好坏,直接影响到程序的扩展性。一方提供一个将源数据转换到中间对象,另一方提供一个接口将数中间对象转化为目的数据。
2.由于引入了中间对象,以结构体组织数据,比直接转换更简单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值