Commit ee7f92b7 authored by Thomas G. Lockhart's avatar Thomas G. Lockhart

Fix up typos.

Move "query result" tables to left side of page (remove leading spaces).
parent ff7b9f55
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.9 2000/05/02 20:01:52 thomas Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.10 2000/06/14 13:10:48 thomas Exp $
-->
<chapter id="sql">
......@@ -155,16 +155,18 @@ $Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.9 2000/05/02 20:01:52 thomas E
<example>
<title id="supplier-fig">The Suppliers and Parts Database</title>
<programlisting>
SUPPLIER SNO | SNAME | CITY SELLS SNO | PNO
-----+---------+-------- -----+-----
SUPPLIER: SELLS:
SNO | SNAME | CITY SNO | PNO
----+---------+-------- -----+-----
1 | Smith | London 1 | 1
2 | Jones | Paris 1 | 2
3 | Adams | Vienna 2 | 4
4 | Blake | Rome 3 | 1
3 | 3
4 | 2
PART PNO | PNAME | PRICE 4 | 3
-----+---------+--------- 4 | 4
PART: 4 | 3
PNO | PNAME | PRICE 4 | 4
----+---------+---------
1 | Screw | 10
2 | Nut | 8
3 | Bolt | 15
......@@ -474,7 +476,7 @@ attributes are taken from. We often write a relation scheme as
INTERSECT (&cap;): builds the set-theoretic intersection of two
tables. Given the tables <classname>R</classname> and
<classname>S</classname>,
<classname>R</classname> &cup; <classname>S</classname> is the
<classname>R</classname> &cap; <classname>S</classname> is the
set of tuples
that are in <classname>R</classname> and in
<classname>S</classname>.
......@@ -532,8 +534,9 @@ attributes are taken from. We often write a relation scheme as
Let the following two tables be given:
<programlisting>
R A | B | C S C | D | E
---+---+--- ---+---+---
R: S:
A | B | C C | D | E
---+---+--- ---+---+---
1 | 2 | 3 3 | a | b
4 | 5 | 6 6 | c | d
7 | 8 | 9
......@@ -547,8 +550,9 @@ attributes are taken from. We often write a relation scheme as
get:
<programlisting>
R x S A | B | R.C | S.C | D | E
---+---+-----+-----+---+---
R x S:
A | B | R.C | S.C | D | E
---+---+-----+-----+---+---
1 | 2 | 3 | 3 | a | b
1 | 2 | 3 | 6 | c | d
4 | 5 | 6 | 3 | a | b
......@@ -565,7 +569,7 @@ attributes are taken from. We often write a relation scheme as
<programlisting>
A | B | R.C | S.C | D | E
---+---+-----+-----+---+---
---+---+-----+-----+---+---
1 | 2 | 3 | 3 | a | b
4 | 5 | 6 | 6 | c | d
</programlisting>
......@@ -580,7 +584,7 @@ attributes are taken from. We often write a relation scheme as
<programlisting>
A | B | C | D | E
---+---+---+---+---
---+---+---+---+---
1 | 2 | 3 | a | b
4 | 5 | 6 | c | d
</programlisting>
......@@ -595,8 +599,9 @@ attributes are taken from. We often write a relation scheme as
C and D.
Then we define the division as:
R &divide; S = {t &mid; &forall; t<subscript>s</subscript> &isin; S
&exist; t<subscript>r</subscript> &isin; R
<programlisting>
R &divide; S = {t &mid; &forall; t<subscript>s</subscript> &isin; S &exist; t<subscript>r</subscript> &isin; R
</programlisting>
such that
t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>s</subscript>}
......@@ -614,8 +619,9 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
Given the following tables
<programlisting>
R A | B | C | D S C | D
---+---+---+--- ---+---
R: S:
A | B | C | D C | D
---+---+---+--- ---+---
a | b | c | d c | d
a | b | e | f e | f
b | c | e | f
......@@ -629,7 +635,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
A | B
---+---
---+---
a | b
e | d
</programlisting>
......@@ -669,7 +675,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
SNAME
-------
-------
Smith
Adams
</programlisting>
......@@ -720,7 +726,10 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<para>
The queries used in <acronym>TRC</acronym> are of the following
form:
x(A) &mid; F(x)
<programlisting>
x(A) &mid; F(x)
</programlisting>
where <literal>x</literal> is a tuple variable
<classname>A</classname> is a set of attributes and <literal>F</literal> is a
......@@ -733,11 +742,11 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<xref linkend="suppl-rel-alg" endterm="suppl-rel-alg">
using <acronym>TRC</acronym> we formulate the following query:
<programlisting>
{x(SNAME) &mid; x &isin; SUPPLIER &and; \nonumber
&exist; y &isin; SELLS &exist; z &isin; PART (y(SNO)=x(SNO) &and; \nonumber
z(PNO)=y(PNO) &and; \nonumber
z(PNAME)='Screw')} \nonumber
<programlisting>
{x(SNAME) &mid; x &isin; SUPPLIER &and;
&exist; y &isin; SELLS &exist; z &isin; PART (y(SNO)=x(SNO) &and;
z(PNO)=y(PNO) &and;
z(PNAME)='Screw')}
</programlisting>
</para>
......@@ -806,7 +815,9 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
to involve
arithmetic operations as well as comparisons, e.g.
A &lt; B + 3.
<programlisting>
A &lt; B + 3.
</programlisting>
Note
that + or other arithmetic operators appear neither in relational
......@@ -843,7 +854,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
used to retrieve data. The syntax is:
<synopsis>
SELECT [ALL|DISTINCT]
SELECT [ALL|DISTINCT]
{ * | <replaceable class="parameter">expr_1</replaceable> [AS <replaceable class="parameter">c_alias_1</replaceable>] [, ...
[, <replaceable class="parameter">expr_k</replaceable> [AS <replaceable class="parameter">c_alias_k</replaceable>]]]}
FROM <replaceable class="parameter">table_name_1</replaceable> [<replaceable class="parameter">t_alias_1</replaceable>]
......@@ -876,7 +887,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
greater than 10 we formulate the following query:
<programlisting>
SELECT * FROM PART
SELECT * FROM PART
WHERE PRICE > 10;
</programlisting>
......@@ -884,7 +895,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
PNO | PNAME | PRICE
-----+---------+--------
-----+---------+--------
3 | Bolt | 15
4 | Cam | 25
</programlisting>
......@@ -896,7 +907,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
from table PART we use the statement:
<programlisting>
SELECT PNAME, PRICE
SELECT PNAME, PRICE
FROM PART
WHERE PRICE > 10;
</programlisting>
......@@ -920,7 +931,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
using the keywords OR, AND, and NOT:
<programlisting>
SELECT PNAME, PRICE
SELECT PNAME, PRICE
FROM PART
WHERE PNAME = 'Bolt' AND
(PRICE = 0 OR PRICE < 15);
......@@ -930,7 +941,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
PNAME | PRICE
--------+--------
--------+--------
Bolt | 15
</programlisting>
</para>
......@@ -941,7 +952,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
take two pieces of a part we could use the following query:
<programlisting>
SELECT PNAME, PRICE * 2 AS DOUBLE
SELECT PNAME, PRICE * 2 AS DOUBLE
FROM PART
WHERE PRICE * 2 < 50;
</programlisting>
......@@ -950,7 +961,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
PNAME | DOUBLE
--------+---------
--------+---------
Screw | 20
Nut | 16
Bolt | 30
......@@ -980,7 +991,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
attributes we formulate the following statement:
<programlisting>
SELECT S.SNAME, P.PNAME
SELECT S.SNAME, P.PNAME
FROM SUPPLIER S, PART P, SELLS SE
WHERE S.SNO = SE.SNO AND
P.PNO = SE.PNO;
......@@ -990,7 +1001,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
SNAME | PNAME
-------+-------
-------+-------
Smith | Screw
Smith | Nut
Jones | Cam
......@@ -1040,7 +1051,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
the following query:
<programlisting>
SELECT AVG(PRICE) AS AVG_PRICE
SELECT AVG(PRICE) AS AVG_PRICE
FROM PART;
</programlisting>
</para>
......@@ -1050,7 +1061,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
AVG_PRICE
-----------
-----------
14.5
</programlisting>
</para>
......@@ -1060,7 +1071,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
the statement:
<programlisting>
SELECT COUNT(PNO)
SELECT COUNT(PNO)
FROM PART;
</programlisting>
......@@ -1068,7 +1079,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
COUNT
-------
-------
4
</programlisting>
......@@ -1108,7 +1119,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
formulate the query:
<programlisting>
SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO
GROUP BY S.SNO, S.SNAME;
......@@ -1118,7 +1129,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
SNO | SNAME | COUNT
-----+-------+-------
-----+-------+-------
1 | Smith | 2
2 | Jones | 1
3 | Adams | 2
......@@ -1133,7 +1144,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
S.SNO | S.SNAME | SE.PNO
-------+---------+--------
-------+---------+--------
1 | Smith | 1
1 | Smith | 2
2 | Jones | 4
......@@ -1151,15 +1162,15 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
S.SNO | S.SNAME | SE.PNO
-------+---------+--------
-------+---------+--------
1 | Smith | 1
| 2
--------------------------
--------------------------
2 | Jones | 4
--------------------------
--------------------------
3 | Adams | 1
| 3
--------------------------
--------------------------
4 | Blake | 2
| 3
| 4
......@@ -1204,7 +1215,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
query:
<programlisting>
SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO
GROUP BY S.SNO, S.SNAME
......@@ -1215,7 +1226,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
SNO | SNAME | COUNT
-----+-------+-------
-----+-------+-------
1 | Smith | 2
3 | Adams | 2
4 | Blake | 3
......@@ -1243,7 +1254,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
named 'Screw' we use the query:
<programlisting>
SELECT *
SELECT *
FROM PART
WHERE PRICE > (SELECT PRICE FROM PART
WHERE PNAME='Screw');
......@@ -1255,7 +1266,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
<programlisting>
PNO | PNAME | PRICE
-----+---------+--------
-----+---------+--------
3 | Bolt | 15
4 | Cam | 25
</programlisting>
......@@ -1272,12 +1283,12 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
greater.
</para>
<para>
<para>
If we want to know all suppliers that do not sell any part
(e.g. to be able to remove these suppliers from the database) we use:
<programlisting>
SELECT *
SELECT *
FROM SUPPLIER S
WHERE NOT EXISTS
(SELECT * FROM SELLS SE
......@@ -1310,7 +1321,7 @@ t<subscript>r</subscript>(A,B)=t&and;t<subscript>r</subscript>(C,D)=t<subscript>
The following query is an example for UNION:
<programlisting>
SELECT S.SNO, S.SNAME, S.CITY
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNAME = 'Jones'
UNION
......@@ -1323,7 +1334,7 @@ gives the result:
<programlisting>
SNO | SNAME | CITY
-----+-------+--------
-----+-------+--------
2 | Jones | Paris
3 | Adams | Vienna
</programlisting>
......@@ -1333,7 +1344,7 @@ gives the result:
Here an example for INTERSECT:
<programlisting>
SELECT S.SNO, S.SNAME, S.CITY
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNO > 1
INTERSECT
......@@ -1346,17 +1357,18 @@ gives the result:
<programlisting>
SNO | SNAME | CITY
-----+-------+--------
-----+-------+--------
2 | Jones | Paris
The only tuple returned by both parts of the query is the one having $SNO=2$.
</programlisting>
The only tuple returned by both parts of the query is the one having $SNO=2$.
</para>
<para>
Finally an example for EXCEPT:
<programlisting>
SELECT S.SNO, S.SNAME, S.CITY
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNO > 1
EXCEPT
......@@ -1369,7 +1381,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
<programlisting>
SNO | SNAME | CITY
-----+-------+--------
-----+-------+--------
2 | Jones | Paris
3 | Adams | Vienna
</programlisting>
......@@ -1396,7 +1408,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
CREATE TABLE command is:
<synopsis>
CREATE TABLE <replaceable class="parameter">table_name</replaceable>
CREATE TABLE <replaceable class="parameter">table_name</replaceable>
(<replaceable class="parameter">name_of_attr_1</replaceable> <replaceable class="parameter">type_of_attr_1</replaceable>
[, <replaceable class="parameter">name_of_attr_2</replaceable> <replaceable class="parameter">type_of_attr_2</replaceable>
[, ...]]);
......@@ -1411,21 +1423,21 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
following <acronym>SQL</acronym> statements are used:
<programlisting>
CREATE TABLE SUPPLIER
CREATE TABLE SUPPLIER
(SNO INTEGER,
SNAME VARCHAR(20),
CITY VARCHAR(20));
</programlisting>
<programlisting>
CREATE TABLE PART
CREATE TABLE PART
(PNO INTEGER,
PNAME VARCHAR(20),
PRICE DECIMAL(4 , 2));
</programlisting>
<programlisting>
CREATE TABLE SELLS
CREATE TABLE SELLS
(SNO INTEGER,
PNO INTEGER);
</programlisting>
......@@ -1463,7 +1475,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
<replaceable class="parameter">q</replaceable>
of them right to the decimal point.
(15 &ge; <replaceable class="parameter">p</replaceable> &ge; <replaceable class="parameter">q</replaceable>q &ge; 0).
(15 &ge; <replaceable class="parameter">p</replaceable> &ge; <replaceable class="parameter">q</replaceable> &ge; 0).
If <replaceable class="parameter">q</replaceable>
is omitted it is assumed to be 0.
......@@ -1514,7 +1526,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
the CREATE INDEX command is used. The syntax is:
<programlisting>
CREATE INDEX <replaceable class="parameter">index_name</replaceable>
CREATE INDEX <replaceable class="parameter">index_name</replaceable>
ON <replaceable class="parameter">table_name</replaceable> ( <replaceable class="parameter">name_of_attribute</replaceable> );
</programlisting>
</para>
......@@ -1528,8 +1540,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
we use the following statement:
<programlisting>
CREATE INDEX I
ON SUPPLIER (SNAME);
CREATE INDEX I ON SUPPLIER (SNAME);
</programlisting>
</para>
......@@ -1578,7 +1589,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
is:
<programlisting>
CREATE VIEW <replaceable class="parameter">view_name</replaceable>
CREATE VIEW <replaceable class="parameter">view_name</replaceable>
AS <replaceable class="parameter">select_stmt</replaceable>
</programlisting>
......@@ -1597,7 +1608,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
<xref linkend="supplier-fig" endterm="supplier-fig"> again):
<programlisting>
CREATE VIEW London_Suppliers
CREATE VIEW London_Suppliers
AS SELECT S.SNAME, P.PNAME
FROM SUPPLIER S, PART P, SELLS SE
WHERE S.SNO = SE.SNO AND
......@@ -1612,8 +1623,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
if it were another base table:
<programlisting>
SELECT *
FROM London_Suppliers
SELECT * FROM London_Suppliers
WHERE P.PNAME = 'Screw';
</programlisting>
......@@ -1621,7 +1631,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
<programlisting>
SNAME | PNAME
-------+-------
-------+-------
Smith | Screw
</programlisting>
</para>
......@@ -1646,7 +1656,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
DROP TABLE command is used:
<programlisting>
DROP TABLE <replaceable class="parameter">table_name</replaceable>;
DROP TABLE <replaceable class="parameter">table_name</replaceable>;
</programlisting>
</para>
......@@ -1654,7 +1664,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
To destroy the SUPPLIER table use the following statement:
<programlisting>
DROP TABLE SUPPLIER;
DROP TABLE SUPPLIER;
</programlisting>
</para>
......@@ -1662,7 +1672,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
The DROP INDEX command is used to destroy an index:
<programlisting>
DROP INDEX <replaceable class="parameter">index_name</replaceable>;
DROP INDEX <replaceable class="parameter">index_name</replaceable>;
</programlisting>
</para>
......@@ -1670,7 +1680,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
Finally to destroy a given view use the command DROP VIEW:
<programlisting>
DROP VIEW <replaceable class="parameter">view_name</replaceable>;
DROP VIEW <replaceable class="parameter">view_name</replaceable>;
</programlisting>
</para>
</sect3>
......@@ -1689,10 +1699,9 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
The syntax is:
<programlisting>
INSERT INTO <replaceable class="parameter">table_name</replaceable> (<replaceable class="parameter">name_of_attr_1</replaceable>
INSERT INTO <replaceable class="parameter">table_name</replaceable> (<replaceable class="parameter">name_of_attr_1</replaceable>
[, <replaceable class="parameter">name_of_attr_2</replaceable> [,...]])
VALUES (<replaceable class="parameter">val_attr_1</replaceable>
[, <replaceable class="parameter">val_attr_2</replaceable> [, ...]]);
VALUES (<replaceable class="parameter">val_attr_1</replaceable> [, <replaceable class="parameter">val_attr_2</replaceable> [, ...]]);
</programlisting>
</para>
......@@ -1702,7 +1711,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
following statement:
<programlisting>
INSERT INTO SUPPLIER (SNO, SNAME, CITY)
INSERT INTO SUPPLIER (SNO, SNAME, CITY)
VALUES (1, 'Smith', 'London');
</programlisting>
</para>
......@@ -1711,7 +1720,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
To insert the first tuple into the relation SELLS we use:
<programlisting>
INSERT INTO SELLS (SNO, PNO)
INSERT INTO SELLS (SNO, PNO)
VALUES (1, 1);
</programlisting>
</para>
......@@ -1725,7 +1734,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
UPDATE command is used. The syntax is:
<programlisting>
UPDATE <replaceable class="parameter">table_name</replaceable>
UPDATE <replaceable class="parameter">table_name</replaceable>
SET <replaceable class="parameter">name_of_attr_1</replaceable> = <replaceable class="parameter">value_1</replaceable>
[, ... [, <replaceable class="parameter">name_of_attr_k</replaceable> = <replaceable class="parameter">value_k</replaceable>]]
WHERE <replaceable class="parameter">condition</replaceable>;
......@@ -1737,7 +1746,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
relation PART we use:
<programlisting>
UPDATE PART
UPDATE PART
SET PRICE = 15
WHERE PNAME = 'Screw';
</programlisting>
......@@ -1757,7 +1766,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
FROM. The syntax is:
<programlisting>
DELETE FROM <replaceable class="parameter">table_name</replaceable>
DELETE FROM <replaceable class="parameter">table_name</replaceable>
WHERE <replaceable class="parameter">condition</replaceable>;
</programlisting>
</para>
......@@ -1767,7 +1776,7 @@ The only tuple returned by both parts of the query is the one having $SNO=2$.
following statement is used:
<programlisting>
DELETE FROM SUPPLIER
DELETE FROM SUPPLIER
WHERE SNAME = 'Smith';
</programlisting>
</para>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment