Name
QBit::QueryData - Query constructor for the data.
GitHub
https://github.com/QBitFramework/QBit-QueryData
Install
cpanm QBit::QueryData
apt-get install libqbit-querydata-perl (http://perlhub.ru/)
Methods
new - created object. Params:
data - data.
fields - default fields (optional, defualt all fields)
filter - default filter (optional, default all data)
definition - fields definition (optional, default 'string')
Example:
my $q = QBit::QueryData->new( data => [ { id => 1, caption => 'c1', data => { k1 => 1.1, k2 => 'd1_2' }, array => [1.1, 'a1_2'], }, { id => 2, caption => 'c2', data => { k1 => 2.1, k2 => 'd2_2' }, array => [2.1, 'a2_2'], }, ], fields => [qw(id caption)], filter => ['OR', [ {id => 1}, ['caption' => '=' => \'c2'], ['data.k1' => '>', \2], ['array.[1]' => 'LIKE' => \'a1'] ]], definition => { 'id' => {type => 'number'}, 'caption' => {type => 'string'}, 'data.k1' => {type => 'number'}, 'data.k2' => {type => 'string'}, 'array.[0]' => {type => 'number'}, 'array.[1]' => {type => 'string'}, }, );
fields - set fields for request
Example:
# set fields $q->fields([qw(caption)]); $q->fields({ caption => '', key => 'id', # create alias 'key' for field 'id' k1 => 'data.k1', # alias on complex field sum_k1 => {SUM => ['data.k1']}, # Function SUM }); # use default fields $q->fields([]); $q->fields({}); # all fields $q->fields();
Functions:
All functions like in MySQL (except FIELD)
FIELD - This is not a function, but it also inherits from Function.
CONCAT
COUNT
MAX
MIN
SUM
DISTINCT
Namespace for functions:
QBit::QueryData::Function::YOUFUNC # you can create self functions (name in uppercase)
get_fields - get fields
Example:
my $fields = $q->get_fields(); # {'caption' => '', 'key' => 'id'}
filter - set filter for request
Types:
number: "=" "<>" "!=" ">" ">=" "<" "<=" "IN" "NOT IN" "IS" "IS NOT"
string: "=" "<>" "!=" ">" ">=" "<" "<=" "IN" "NOT IN" "IS" "IS NOT" "LIKE" "NOT LIKE"
For list: "=" "<>" "!=" "IN" "NOT IN"
Example:
$q->filter({id => 1, caption => 'c1'}); # or ['AND', [['id' => '=' => \1], ['caption' => '=' => \'c1']]] $q->filter(['caption' => 'LIKE' => \'c']); $q->filter(['data.k1' => '<' => \2]); $q->filter(['array.[1]' => '=' => \'a2_2']); $q->filter(); # all data
definition - set fields definition
Example:
$q->definition({ 'id' => {type => 'number'}, 'caption' => {type => 'string'}, 'data.k1' => {type => 'number'}, 'data.k2' => {type => 'string'}, 'array.[0]' => {type => 'number'}, 'array.[1]' => {type => 'string'}, });
group_by - grouping by fields
Example:
$q->group_by(qw(caption data.k1 array.[1]));
order_by - set order sorting
Example:
# Ascending $q->order_by(qw(id caption data.k1 array.[1])); # or (['id', 0], ['caption', 0], ['data.k1', 0], ['array.[1]', 0]) # Descending $q->order_by(['id', 1]);
limit - set offset and limit
Example:
$q->limit($offset, $limit); $q->limit(); # all data
found_rows - data count
Example:
my $rows = $q->found_rows(); # 2
distinct - set/reset only unique elements
Example:
#set $q->distinct(1); # or $q->distinct(); #reset $q->distinct(0);
insensitive - set/reset insensitive mode for LIKE
Example:
#set $q->insensitive(1); # or $q->insensitive(); #reset $q->insensitive(0);
get_all - get data by settings
Example:
my $data = $q->get_all(); $data = $q->fields([qw(id)])->filter(['caption' => 'LIKE' => \'c'])->group_by('id')->order_by(['id', 1])->get_all();
all_langs - support interface DB::Query
calc_rows - support interface DB::Query
for_update - support interface DB::Query