@@ -68,367 +68,4 @@ my $clause = {}; # Clause of SQL Query.
6868$sql_abstract -> select_join($table_list , $column , $clause );
6969```
7070
71- ## Methods
72-
73- ` CellBIS::SQL::Abstract ` inherit from [ Mojo::Base] ( https://metacpan.org/pod/Mojo::Base ) .
74- Methods ` insert ` , ` update ` , ` select ` , and ` select_join ` .
75-
76- ` create_table ` is additional method.
77- Currently, only supports MariaDB/MySQL and SQLite Syntax
78-
79- The following are the methods available from this module:
80-
81- ### create_table - MariaDB/MySQL :
82- ``` perl
83- use CellBIS::SQL::Abstract
84- my $sql_abstract = CellBIS::SQL::Abstract-> new;
85-
86- my $table_name = ' my_users' ;
87- my $col_list = [ ' id' , ' first_name' , ' last_name' , ' other_col_name' ];
88- my $col_attr = {
89- ' id' => {
90- type => {
91- name => ' int' ,
92- size => 11
93- },
94- is_primarykey => 1,
95- is_autoincre => 1,
96- },
97- ' first_name' => {
98- type => {
99- name => ' varchar' ,
100- size => 50,
101- },
102- is_null => 0,
103- },
104- ' last_name' => {
105- type => {
106- name => ' varchar' ,
107- size => 50,
108- },
109- is_null => 0,
110- },
111- ' other_col_name' => {
112- type => {
113- name => ' varchar' ,
114- size => 60,
115- },
116- is_null => 0,
117- }
118- };
119- my $create_table = $sql_abstract -> create_table($table_name , $col_list , $col_attr );
120- ```
121- SQL Equivalent :
122- ``` mysql
123- CREATE TABLE IF NOT EXISTS users(
124- id INT (11 ) NOT NULL PRIMARY KEY AUTO_INCREMENT,
125- first_name VARCHAR (50 ) NOT NULL ,
126- last_name VARCHAR (50 ) NOT NULL ,
127- other_col_name VARCHAR (60 ) NOT NULL
128- ) ENGINE= InnoDB DEFAULT CHARSET= utf8
129- ```
130-
131- ### create_table - SQLite :
132- ``` perl
133- use CellBIS::SQL::Abstract
134-
135- my $sql_abstract = CellBIS::SQL::Abstract-> new(db_type => ' sqlite' );
136-
137- my $table_name = ' my_users' ;
138- my $col_list = [ ' id' , ' first_name' , ' last_name' , ' other_col_name' ];
139- my $col_attr = {
140- ' id' => {
141- type => { name => ' integer' },
142- is_primarykey => 1,
143- is_autoincre => 1,
144- },
145- ' first_name' => {
146- type => {
147- name => ' varchar' ,
148- size => 50,
149- },
150- is_null => 0,
151- },
152- ' last_name' => {
153- type => {
154- name => ' varchar' ,
155- size => 50,
156- },
157- is_null => 0,
158- },
159- ' other_col_name' => {
160- type => {
161- name => ' varchar' ,
162- size => 60,
163- },
164- is_null => 0,
165- }
166- };
167- $create_table = $sql_abstract -> create_table($table_name , $col_list , $col_attr );
168- ```
169- SQL Equivalent :
170- ``` sqlite
171- CREATE TABLE IF NOT EXISTS users(
172- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
173- first_name VARCHAR NOT NULL,
174- last_name VARCHAR NOT NULL,
175- other_col_name VARCHAR(60) NOT NULL
176- )
177- ```
178-
179- ### create_table with Foreign key - MariaDB/MySQL
180- ``` perl
181- use CellBIS::SQL::Abstract
182- my $sql_abstract = CellBIS::SQL::Abstract-> new;
183-
184- my $table_name = ' my_companies' ;
185- my $col_list = [
186- ' id_company' ,
187- ' id_company_users' ,
188- ' company_name' ,
189- ];
190- my $col_attr = {
191- ' id_company' => {
192- type => {
193- name => ' int' ,
194- size => ' 11'
195- },
196- is_primarykey => 1,
197- is_autoincre => 1,
198- },
199- ' id_company_users' => {
200- type => {
201- name => ' int' ,
202- size => ' 11' ,
203- },
204- is_null => 0,
205- },
206- ' company_name' => {
207- type => {
208- name => ' varchar' ,
209- size => ' 200' ,
210- },
211- is_null => 0,
212- }
213- };
214- my $table_attr = {
215- fk => {
216- name => ' user_companies_fk' ,
217- col_name => ' id_company_users' ,
218- table_target => ' users' ,
219- col_target => ' id' ,
220- attr => {
221- onupdate => ' cascade' ,
222- ondelete => ' cascade'
223- }
224- },
225- charset => ' utf8' ,
226- engine => ' innodb' ,
227- };
228- my $create_table = $sql_abstract -> create_table($table_name , $col_list , $col_attr , $table_attr );
229- ```
230- SQL Equivalent :
231- ``` mysql
232- CREATE TABLE IF NOT EXISTS company(
233- id_company INT (11 ) NOT NULL PRIMARY KEY AUTO_INCREMENT,
234- id_company_users INT (11 ) NOT NULL ,
235- company_name VARCHAR (200 ) NOT NULL ,
236- KEY user_company_fk (id_company_users),
237- CONSTRAINT user_company_fk FOREIGN KEY (id_company_users) REFERENCES users (id)
238- ON DELETE CASCADE ON UPDATE CASCADE
239- ) ENGINE= InnoDB DEFAULT CHARSET= utf8;
240- ```
241-
242- ### create_table with Foreign key - SQLite
243- ``` perl
244- use CellBIS::SQL::Abstract
245-
246- my $sql_abstract = CellBIS::SQL::Abstract-> new(db_type => ' sqlite' );
247-
248- my $table_name = ' my_companies' ;
249- my $col_list = [
250- ' id_company' ,
251- ' id_company_users' ,
252- ' company_name' ,
253- ];
254- my $col_attr = {
255- ' id_company' => {
256- type => { name => ' integer' },
257- is_primarykey => 1,
258- is_autoincre => 1,
259- },
260- ' id_company_users' => {
261- type => { name => ' integer' },
262- is_null => 0,
263- },
264- ' company_name' => {
265- type => {
266- name => ' varchar' ,
267- size => ' 200' ,
268- },
269- is_null => 0,
270- }
271- };
272- my $table_attr = {
273- fk => {
274- name => ' user_companies_fk' ,
275- col_name => ' id_company_users' ,
276- table_target => ' users' ,
277- col_target => ' id' ,
278- attr => {
279- onupdate => ' cascade' ,
280- ondelete => ' cascade'
281- }
282- },
283- charset => ' utf8' ,
284- engine => ' innodb' ,
285- };
286- $create_table = $sql_abstract -> create_table($table_name , $col_list , $col_attr , $table_attr );
287- ```
288- SQL Equivalent :
289- ``` sqlite
290- CREATE TABLE IF NOT EXISTS company(
291- id_company INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
292- id_company_users INTEGER NOT NULL,
293- company_name VARCHAR NOT NULL,
294- CONSTRAINT user_company_fk FOREIGN KEY (id_company_users) REFERENCES users (id)
295- ON DELETE CASCADE ON UPDATE CASCADE
296- )
297- ```
298-
299- ### insert
300- ``` perl
301- use CellBIS::SQL::Abstract
302- my $sql_abstract = CellBIS::SQL::Abstract-> new;
303-
304- my $table_name = ' my_users' ;
305- my $column = [
306- ' first_name' ,
307- ' last_name'
308- ];
309- my $value = [
310- ' my_name' ,
311- ' my_last_name'
312- ];
313-
314- # If no Prepare Statement
315- my $insert_no_pre_st = $sql_abstract -> insert($table_name , $column , $value );
316-
317- # IF Prepare Statement
318- my $insert = $sql_abstract -> insert($table_name , $column , $value , ' pre-st' );
319- ```
320- SQL equivalent :
321- ``` mysql
322- # No Prepare Statement :
323- INSERT INTO my_users(first_name, last_name) VALUES (' my_name' , ' my_last_name' );
324-
325- # Prepare Statement :
326- INSERT INTO my_users(first_name, last_name) VALUES (?, ?);
327- ```
328-
329- ### update
330- ``` perl
331- use CellBIS::SQL::Abstract
332- my $sql_abstract = CellBIS::SQL::Abstract-> new;
333-
334- my $table_name = ' my_users' ; # Table name.
335- my $column = [
336- ' first_name' ,
337- ' last_name'
338- ];
339- my $value = [
340- ' Achmad Yusri' ,
341- ' Afandi'
342- ];
343- my $clause = {
344- where => ' id = 2'
345- };
346-
347- # Preare Statement :
348- my $update = $sql_abstract -> update($table_name , $column , $value , $clause );
349-
350- # No Prepare Statement :
351- my $update = $sql_abstract -> update($table_name , $column , $value , $clause , ' pre-st' );
352- ```
353- SQL equivalent :
354- ``` mysql
355- # Preare Statement :
356- UPDATE my_users SET first_name= ?, last_name= ? WHERE id = 2 ;
357-
358- # No Prepare Statement :
359- UPDATE my_users SET first_name= ' Achmad Yusri' , last_name= ' Afandi' WHERE id = 2 ;
360- ```
361-
362- ### delete
363- ``` perl
364- use CellBIS::SQL::Abstract
365- my $sql_abstract = CellBIS::SQL::Abstract-> new;
366-
367- my $table_name = ' my_users' ;
368- my $clause = {
369- where => ' id = 2'
370- };
371- my $delete = $sql_abstract -> delete ($table_name , $clause );
372- ```
373- SQL equivalent :
374- ``` mysql
375- DELETE FROM my_users WHERE id = 2 ;
376- ```
377-
378- ### select
379- ``` perl
380- use CellBIS::SQL::Abstract
381- my $sql_abstract = CellBIS::SQL::Abstract-> new;
382-
383- my $table_name = ' my_users' ;
384- my $column = [];
385- my $clause = {
386- where => ' id = 2'
387- };
388- my $select = $sql_abstract -> select($table_name , $column , $clause );
389- ```
390- SQL equivalent :
391- ``` mysql
392- SELECT * FROM my_users WHERE id = 2 ;
393- ```
394- ### select_join
395- ``` perl
396- use CellBIS::SQL::Abstract
397- my $sql_abstract = CellBIS::SQL::Abstract-> new;
398-
399- my $table_list = [
400- { name => ' my_users' , ' alias' => ' t1' , primary => 1 },
401- { name => ' my_companies' , ' alias' => ' t2' }
402- ];
403- my $column = [
404- ' t1.first_name' ,
405- ' t1.last_name' ,
406- ' t2.company_name' ,
407- ];
408- my $clause = {
409- ' typejoin' => {
410- ' my_companies' => ' inner' ,
411- },
412- ' join' => [
413- {
414- name => ' my_companies' ,
415- onjoin => [
416- ' t1.id' , ' t2.id_company_users' ,
417- ]
418- }
419- ],
420- ' where' => ' t1.id = 2 AND t2.id_company_users = 1' ,
421- ' orderby' => ' t1.id' ,
422- ' order' => ' desc' , # asc || desc
423- ' limit' => ' 10'
424- };
425- my $select_join = $sql_abstract -> select_join($table_list , $column , $clause );
426- ```
427- SQL equivalent :
428- ``` mysql
429- SELECT t1 .first_name , t1 .last_name , t2 .company_name
430- FROM my_users AS t1
431- INNER JOIN my_companies AS t2
432- ON t1 .id = t2 .id_company_users
433- WHERE t1 .id = 2 AND t2 .id_company_users = 1 ORDER BY t1 .id DESC LIMIT 10 ;
434- ```
71+ For more information you can see on [ CPAN] ( https://metacpan.org/pod/CellBIS::SQL::Abstract ) .
0 commit comments