%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% File: $Id$
%
% Defines various relational algebra symbols.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\NeedsTeXFormat{LaTeX2e}[2001/06/01]
\ProvidesPackage{relalg}[2005/03/08 Relational algebra notation]

\RequirePackage{latexsym}
\RequirePackage{graphics}
% Graphics is needed so that we can scale the size of a couple of operators.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% BASIC OPERATORS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% select or restrict operator
\newcommand{\Select}{\ensuremath{\sigma}}
\newcommand{\Restrict}{\ensuremath{\sigma}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% project operator
\newcommand{\Project}{\ensuremath{\pi}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set union operator
\newcommand{\Union}{\ensuremath{\cup}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set difference operator
\newcommand{\Difference}{\ensuremath{-}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% cartesian product operator
\newcommand{\Product}{\ensuremath{\times}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% rename operator
\newcommand{\Rename}{\ensuremath{\rho}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% ADDITIONAL OPERATORS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set intersection operator
\newcommand{\Intersection}{\ensuremath{\cap}}
\newcommand{\Intersect}{\ensuremath{\cap}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% natural join operator
\newcommand{\NaturalJoin}{\ensuremath{\Join}}
\newcommand{\NatJoin}{\ensuremath{\Join}}
\newcommand{\NJoin}{\ensuremath{\Join}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% division operators
\newcommand{\Divide}{\ensuremath{/}}
\newcommand{\AltDivide}{\ensuremath{\div}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% assignment operator
\newcommand{\Assign}{\ensuremath{\leftarrow}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% EXTENDED OPERATORS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% aggregate functions
\newcommand{\Sum}[1]{\ensuremath{\mathcal{G}_{\mathbf{\mathrm{sum}}(#1)}}}
\newcommand{\Avg}[1]{\ensuremath{\mathcal{G}_{\mathbf{\mathrm{avg}}(#1)}}}
\newcommand{\Min}[1]{\ensuremath{\mathcal{G}_{\mathbf{\mathrm{min}}(#1)}}}
\newcommand{\Max}[1]{\ensuremath{\mathcal{G}_{\mathbf{\mathrm{max}}(#1)}}}
\newcommand{\Count}[1]{\ensuremath{\mathcal{G}_{\mathbf{\mathrm{count}}(#1)}}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% outer join operators
% Note: can't use \ensuremath in these because it screws up the spacing.
% The $ are OK though because they're used inside hboxes anyway.
\newcommand{\LeftOuterJoin}{\scalebox{0.5}[1]{$\sqsupset$}\mkern-2.5mu\lower0.1em\hbox{$\Join$}}
\newcommand{\leftOuterJoin}{\LeftOuterJoin}
\newcommand{\LOuterJoin}{\LeftOuterJoin}
\newcommand{\LeftOuter}{\LeftOuterJoin}
\newcommand{\LOJ}{\LeftOuterJoin}

\newcommand{\RightOuterJoin}{\lower0.1em\hbox{$\Join$}\mkern-2.5mu\scalebox{0.5}[1]{$\sqsubset$}}
\newcommand{\rightOuterJoin}{\RightOuterJoin}
\newcommand{\ROuterJoin}{\RightOuterJoin}
\newcommand{\RightOuter}{\RightOuterJoin}
\newcommand{\ROJ}{\RightOuterJoin}

\newcommand{\FullOuterJoin}{\scalebox{0.5}[1]{$\sqsupset$}\mkern-2.5mu\lower0.1em\hbox{$\Join$}\mkern-2.5mu\scalebox{0.5}[1]{$\sqsubset$}}
\newcommand{\fullOuterJoin}{\FullOuterJoin}
\newcommand{\FOuterJoin}{\FullOuterJoin}
\newcommand{\FullOuter}{\FullOuterJoin}
\newcommand{\FOJ}{\FullOuterJoin}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% MISCELLANEOUS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% logical operators
% \And appears to conflict with beamer? (unconfirmed)
\newcommand{\LogicalAnd}{\ensuremath{\wedge}}
\newcommand{\LogAnd}{\ensuremath{\wedge}}

\newcommand{\LogicalOr}{\ensuremath{\vee}}
\newcommand{\LogOr}{\ensuremath{\vee}}

\newcommand{\LogicalNot}{\ensuremath{\neg}}
\newcommand{\LogNot}{\ensuremath{\neg}}

\endinput

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% $Log$
% Revision 1.3  2005/03/08 01:24:51  nstanger
% - Added \leftOuterJoin, \rightOuterJoin and \fullOuterJoin to make generating
%   them from XML easier.
%
% Revision 1.2  2004/07/19 00:26:19  nstanger
% - Renamed logical operators to \LogicalXXX because of conflict with \And, possibly defined in beamer?
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
