⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 field.pm

📁 普通的ETL工具
💻 PM
📖 第 1 页 / 共 2 页
字号:
			.
			(
				$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 + -