📄 field.pm
字号:
.
(
$self->configuration()->hash()
? '}'
: ']'
);
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::GroupByField;
use base qw(ETL::Pequel3::Type::Field::Abstract);
use Class::STL::ClassMembers qw( pequel_type date_type input_field output_field ),#TODO: output_field???
Class::STL::ClassMembers::DataMember->new(name => 'pequel_type', default => 'string');
use Class::STL::ClassMembers::Constructor;
sub new_extra
{
my $self = shift;
$self->tname('_I_' . $self->name());
if (defined($self->pequel_type()) && !ref($self->pequel_type())) {
my $pequel_type = $self->pequel_types()->exists($self->pequel_type())
|| $self->err()->user_error(10219, "Unkown pequel-type '@{[
$self->pequel_type() ]}' for field '@{[ $self->name() ]}'");
$self->pequel_type($pequel_type);
}
$self->date_type($self->date_types()->exists($self->configuration()->default_datetype()))
if ($self->pequel_type()->name() eq 'date' && !defined($self->date_type()));
#TODO: update output_field->use_list()...
$self->input_field()->xref()->referenced_by($self) if (defined($self->input_field()));
$self->xref()->references($self->input_field()) if (defined($self->input_field()));
return $self;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::ProcessField;
use base qw(ETL::Pequel3::Type::Field::Abstract);
use Class::STL::ClassMembers qw( pequel_type date_type input_field output_field operator calc_exp calc_exp_raw );
use Class::STL::ClassMembers::Constructor;
sub new_extra
{
my $self = shift;
$self->input_field()->xref()->referenced_by($self) if (defined($self->input_field()));
$self->xref()->references($self->input_field()) if (defined($self->input_field()));
$self->output_field()->xref()->referenced_by($self) if (defined($self->output_field()));
$self->xref()->references($self->output_field()) if (defined($self->output_field()));
return $self;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::TransferField;
use base qw(ETL::Pequel3::Type::Field::OutputField);
use Class::STL::ClassMembers;
use Class::STL::ClassMembers::Constructor;
sub new_extra
{
my $self = shift;
$self->tname($self->input_field()->tname());
return $self;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::JoinField; #--> InputJoinField
use base qw(ETL::Pequel3::Type::Field::InputField);
use Class::STL::ClassMembers; #? qw( target_ref ); #TODO: ??? not used ???
use Class::STL::ClassMembers::Constructor;
sub new_extra
{
my $self = shift;
$self->tname($self->dataset()->datasource()->fdname() . '_F_' . $self->name());
return $self;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::TableField;
use base qw(ETL::Pequel3::Type::Field::Abstract);
use Class::STL::ClassMembers qw( table tname ds_column ),
Class::STL::ClassMembers::DataMember->new(name => 'pequel_type', default => 'string');
use Class::STL::ClassMembers::Constructor;
sub new_extra
{
my $self = shift;
$self->tname($self->table()->tname() . '_F_' . $self->name());
use ETL::Pequel3::CrossRef;
$self->xref(ETL::Pequel3::CrossRef->new(
xref_key =>
(
'Table'
. '::'
. $self->table()->name()
. '::'
. (split(/[:]+/, ref($self)))[-1]
. '::'
. $self->name()
),
target_obj => $self,
target_name => $self->name(),
pequel_ref => $self->pequel_ref(),
@_,
));
return $self;
}
sub getvar
{
my $self = shift;
my $key_exp = shift;
my $show_synonyms = defined($_[0]) ? $_[0] : $self->configuration()->show_synonyms();
my $key_eval = $key_exp =~ /[&\(|\[|,]/ ? "\@{[ $key_exp ]}" : $key_exp;
return '${$$' . $self->table()->tname() . '{qq{' . $key_eval . '}}}['
. ($show_synonyms ? "\$c@{[ $self->tname() ]}" : $self->field_number() -1)
. ']';
}
sub print_info
{
my $self = shift;
return $self->SUPER::print_info()
. '<--' . $self->table()->name()
. ':' . ($self->table()->can('input_dataset')
? $self->table()->input_dataset()->datasource()->target_name()
: 'LOCAL')
. '->' . $self->name();
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::DbiField;
use base qw(ETL::Pequel3::Type::Field::TableField);
use Class::STL::ClassMembers;
use Class::STL::ClassMembers::Constructor;
sub getvar
{
my $self = shift;
my $key_exp = shift;
my $key_eval = $key_exp =~ /[&\(|\[|,]/ ? "\@{[ $key_exp ]}" : $key_exp;
#NOTE: return result from dbi->fetchall_hashref():
return '$' . $self->table()->tname() . '->{qq{' . $key_eval . '}}->{\'' . uc($self->name) . '\'}';
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::RejectField;
use base qw(ETL::Pequel3::Type::Field::OutputField);
use Class::STL::ClassMembers;
use Class::STL::ClassMembers::Constructor;
sub getvar
{
my $self = shift;
return
(
$self->configuration()->hash()
? "\$@{[ $self->dataset()->arr_vname() ]}\{__REJECT__}{"
: "\$@{[ $self->dataset()->arr_vname() ]}\["
)
.
(
$self->configuration()->show_synonyms()
? "\$c@{[ $self->tname() ]}"
: $self->field_number() -1
)
.
(
$self->configuration()->hash()
? '}'
: ']'
);
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::RejectReason;
use base qw(ETL::Pequel3::Type::Field::Abstract);
use Class::STL::ClassMembers
qw(
reason_code
condition_exp
condition_exp_raw
reason_message
output_fields
);
use Class::STL::ClassMembers::Constructor;
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::Expression;
use base qw(ETL::Pequel3::Type::Field::Abstract);
use Class::STL::ClassMembers qw( exp exp_raw );
use Class::STL::ClassMembers::Constructor;
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Field::SortField;
use base qw(ETL::Pequel3::Type::Field::Abstract);
use Class::STL::ClassMembers qw( column first_char last_char ),
Class::STL::ClassMembers::DataMember->new(name => 'pequel_type', default => 'string'),
Class::STL::ClassMembers::DataMember->new(name => 'ignore_case', default => 0),
Class::STL::ClassMembers::DataMember->new(name => 'ignore_leading_blanks', default => 0),
Class::STL::ClassMembers::DataMember->new(name => 'direction', default => 'asc', validate => '^(asc|desc)$');
use Class::STL::ClassMembers::Constructor;
sub new_extra
{
my $self = shift;
if (defined($self->pequel_type()) && !ref($self->pequel_type())) {
my $pequel_type = $self->pequel_types()->exists($self->pequel_type())
|| $self->err()->user_error(10219, "Unkown pequel-type '@{[
$self->pequel_type() ]}' for input field '@{[ $self->name() ]}'");
$self->pequel_type($pequel_type);
}
return $self;
}
sub getvar
{
my $self = shift;
my $text = " -k ";
foreach my $comma (0..1) {
$text .= ',' if ($comma);
$text .= $self->column();
$text .= ".@{[ $self->first_char() ]}" if (!$comma && defined($self->first_char()));
$text .= ".@{[ $self->last_char() ]}" if ($comma && defined($self->last_char()));
$text .= "f" if ($self->ignore_case());
$text .= "b" if ($self->ignore_leading_blanks());
$text .= 'n' if ($self->pequel_type()->name() =~ /^(numeric|amount)$/i);
$text .= 'r' if ($self->direction() eq 'desc');
}
return $text;
}
}
# ----------------------------------------------------------------------------------------------------
1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -