|=--------------------------------------------------=|
_________________ .____ ___________________
/ _____/\_____ \ | | \_ _____/\______ \
\_____ \ / / \ \| | | __)_ | | \
/ \/ \_/. \ |___ | \ | ` \
/_______ /\_____\ \_/_______ \/_______ //_______ /
\/ \__> \/ \/ \/
|=--------------------------------------------------=|
. |03.11 - Data dictionary .
|=--------------------------------------------------=|
Standard Relational Database Management System
has metadata stored in Data dictionary. This is
collection of tables or views. This can be used for
example if You would like to display all columns of
given table.
Let's assume we would like to display the query
used to created a table. For example to show the DDL
query for table users2 we would issue following
query:
select sql
from sqlite_master
where name = 'users2';
Here the sqlite_master table is the data dictionary
metadata table. Result of that query would be
following:
sql
--------------------
CREATE TABLE users2(
user_key INT,
user_name TEXT,
user_password TEXT
)
For some reason we would like work with the
dataset of the columns of a given table. In SQLite
we would use PRAGMA keyword and use the argument
table_info(TABLE_NAME). This can be used for example
if we would like to generate select statement from
the list of columns in that table. To get the list of
column we can use:
pragma table_info('users2');
And we will get the list of the columns with given
data-type and additional information:
cid name type ... pk
----- ------------- ------ ... ----
0 user_key INT ... 0
1 user_name TEXT ... 0
2 user_password TEXT ... 0
As mentioned we will now try to dynamically compose
the select query from query to the data dictionary.
We will use GROUP_CONCAT to join the rows into one
column and use concatenate operator to join the rows
with the data dictionary resulting rows. To achieve
this we will issue following query:
select
'select '||group_concat(name)
|| ' from users2' sql
from pragma_table_info('users2')
order by cid asc;
Result of above query will be select with
dynamically selected rows in order in the database
metadata:
sql
---------------------------------------------------
select user_key,user_name,user_password from users2
This can be extended in case we would have the
index on the table. Let's create index on the table
users2.
create unique index idx_users2_uk on
users2 (user_key);
And this operation is immediately shown in the
corresponding data dictionary view. We can access it
by using the pragma again like this:
select *
from pragma_index_info('idx_users2_uk');
And database will return following reply:
seqno cid name
------- ----- --------
0 0 user_key
And we will get the list of columns used in the
index we queried for.
That's it for the Data dictionary part.
|=--------------------------------------------------=|
; | | Thanks Linux and Vim | buy me a coffee | o |;
|=--------------------------------------------------=|
|