our
$VERSION
=
'0.01'
;
has
'context'
;
sub
generate_table(
$self
) {
my
$sections
=
""
;
my
$json_arr
=
$self
->json;
my
$length
=
scalar
@{
$json_arr
};
for
(
my
$i
= 0;
$i
<
$length
;
$i
++) {
my
$json
= @{
$json_arr
}[
$i
];
if
(
exists
(
$json
->{version})) {
$sections
.=
$self
->_version(
$json
->{version});
}
}
$self
->set_sql(
$self
->create_file(
$sections
));
return
;
}
sub
_version(
$self
,
$version
) {
my
$sql
=
""
;
my
$sections
=
""
;
my
$length
=
scalar
@{
$version
};
for
(
my
$i
= 0;
$i
<
$length
;
$i
++) {
if
(
exists
(@{
$version
}[
$i
]->{tables})) {
my
$tables
= @{
$version
}[
$i
]->{tables};
my
$len
=
scalar
@{
$tables
};
for
(
my
$j
= 0;
$j
<
$len
;
$j
++){
my
$table
=
$self
->shift_section(
$tables
);
$sql
.=
$self
->create_table_sql(
$table
);
}
}
if
(
exists
(@{
$version
}[
$i
]->{views})) {
my
$views
= @{
$version
}[
$i
]->{views};
my
$len
=
scalar
@{
$views
};
for
(
my
$j
= 0;
$j
<
$len
;
$j
++){
my
$view
=
$self
->shift_section(
$views
);
$sql
.=
$self
->create_view_sql(
$view
);
}
}
$sections
.=
$self
->create_section(
$sql
, @{
$version
}[
$i
]->{number});
}
return
$sections
}
sub
create_file(
$self
,
$sections
) {
my
$file
=
$self
->templates->get_data_section(
'file'
);
my
$date
=
localtime
();
$file
=~ s/<<date>>/
$date
/ig;
$file
=~ s/<<sections>>/
$sections
/ig;
return
$file
;
}
sub
create_section(
$self
,
$sql
,
$number
) {
my
$section
=
$self
->templates->get_data_section(
'section'
);
$section
=~ s/<<version>>/
$number
/ig;
$section
=~ s/<<table>>/
$sql
/ig;
return
$section
;
}
sub
create_view_sql(
$self
,
$view
) {
my
$sql
= Daje::Workflow::GenerateSQL::Script::View->new(
json
=>
$view
->{view},,
templates
=>
$self
->templates,
)->generate();
return
$sql
}
sub
create_table_sql(
$self
,
$table
) {
my
$result
=
""
;
my
$fields
=
''
;
my
$indexes
=
''
;
my
$foreignkeys
=
""
;
my
$sql
=
""
;
my
$name
=
$table
->{table}->{name};
if
(
exists
(
$table
->{table}->{fields})) {
$fields
=
$self
->create_fields(
$table
->{table});
$foreignkeys
=
$self
->create_fkeys(
$table
->{table},
$name
);
}
my
$test
=
$table
->{table}->{
index
};
if
(
exists
(
$table
->{table}->{
index
})) {
$indexes
=
$self
->create_index(
$table
->{table})
}
if
(
exists
(
$table
->{table}->{sql})) {
$sql
=
$self
->create_sql(
$table
->{table},
$name
)
}
my
$template
=
$self
->fill_template(
$name
,
$fields
,
$foreignkeys
,
$indexes
,
$sql
);
return
$template
;
}
sub
create_sql(
$self
,
$json
,
$tablename
) {
my
$sql_stmt
= Daje::Workflow::GenerateSQL::Script::Sql->new(
json
=>
$json
,
templates
=>
$self
->templates,
tablename
=>
$tablename
,
);
$sql_stmt
->create_sql();
return
$sql_stmt
->sql();
}
sub
fill_template(
$self
,
$name
,
$fields
,
$foreignkeys
,
$indexes
,
$sql
) {
my
$template
=
$self
->templates->get_data_section(
'table'
);
$template
=~ s/<<fields>>/
$fields
/ig;
$template
=~ s/<<tablename>>/
$name
/ig;
if
(
exists
(
$foreignkeys
->{template_fkey})) {
$template
=~ s/<<foregin_keys>>/
$foreignkeys
->{template_fkey}/ig;
}
else
{
$template
=~ s/<<foregin_keys>>//ig;
}
if
(
exists
(
$foreignkeys
->{template_ind})) {
$indexes
.=
""
.
$foreignkeys
->{template_ind};
}
$template
=~ s/<<indexes>>/
$indexes
/ig;
$template
=~ s/<<sql>>/
$sql
/ig;
return
$template
;
}
sub
create_fields(
$self
,
$json
) {
my
$fields
= Daje::Workflow::GenerateSQL::Script::Fields->new(
json
=>
$json
,
templates
=>
$self
->templates,
error
=>
$self
->error,
);
$fields
->create_fields();
my
$sql
=
$fields
->sql;
return
$sql
;
}
sub
create_index(
$self
,
$json
) {
my
$test
= 1;
my
$templates
=
$self
->templates;
my
$index
= Daje::Workflow::GenerateSQL::Script::Index->new(
json
=>
$json
,
templates
=>
$templates
,
tablename
=>
$json
->{name},
error
=>
$self
->error,
);
$index
->create_index();
my
$sql
=
$index
->sql;
return
$sql
;
}
sub
create_fkeys(
$self
,
$json
,
$table_name
) {
my
$foreign_keys
= {};
my
$foreign_key
= Daje::Workflow::GenerateSQL::Script::ForeignKey->new(
json
=>
$json
,
templates
=>
$self
->templates,
tablename
=>
$table_name
,
error
=>
$self
->error,
);
$foreign_key
->create_foreign_keys();
if
(
$foreign_key
->created() == 1) {
$foreign_keys
=
$foreign_key
->templates();
}
return
$foreign_keys
;
}
1;