Review slides

This commit is contained in:
Oliver Kennedy 2021-05-04 00:16:57 -04:00
parent 5c77bcb8e5
commit 93c63e4852
Signed by: okennedy
GPG key ID: 3E5F9B3ABD3FDB60
22 changed files with 16123 additions and 0 deletions

View file

@ -135,8 +135,12 @@ schedule:
slides: slide/2021-04-29-Provenance.html
- date: "May 4"
topic: "Review"
materials:
slides: slide/2021-05-04-Review1.html
- date: "May 6"
topic: "Review"
materials:
slides: slide/2021-05-06-Review2.html
- date: "May 13"
topic: "<b>Final Exam</b>"
materials:

View file

@ -0,0 +1,782 @@
---
template: templates/cse4562_2021_slides.erb
title: Exam Review
date: May 4, 2021
dependencies:
- lib/slide_utils.rb
---
<%
require "slide_utils.rb"
%>
<section>
<section>
<h3>Exam Format</h3>
<p>You will need:<ul>
<li>A smartphone or second device with a camera and zoom installed.</li>
<li>A quiet, well lit area.</li>
<li>A view of your work surface, you, and your computer screen.</li>
</ul></p>
</section>
<section>
<h3>Day-Of</h3>
<ul>
<li>Remember to enable "Do-not-Disturb" mode on your devices.</li>
<li>Log into Zoom 10-15 min prior to start.</li>
<li>Everyone logged into Zoom will be given a pin to access their exam.</li>
<li>Write your answers on paper in dark, visible ink.</li>
<li>Scan your exam via zoom session in a breakout room.</li>
</ul>
</section>
</section>
<section>
<pre><code class="sql">
SELECT [DISTINCT] targetlist
FROM relationlist
WHERE condition
</code></pre>
<ol>
<li class="fragment">Compute the $2^n$ combinations of tuples in all relations appearing in <span style="color: red;">relationlist</span></li>
<li class="fragment">Discard tuples that fail the <span style="color: red;">condition</span></li>
<li class="fragment">Delete attributes not in <span style="color: red;">targetlist</span></li>
<li class="fragment">If <span style="font-family: Courier, fixedwidth;">DISTINCT</span> is specified, eliminate duplicate rows</li>
</ol>
<p style="font-size: 70%;" class="fragment">
This is the least efficient strategy to compute a query!
A good optimizer will find <b>more efficient strategies</b> to compute <b>the same answer.</b>
</p>
</section>
<section>
<section>
<h2>Record Layouts</h2>
</section>
<section>
<h3>Record Layout 1: Fixed</h3>
<svg data-src="2021-05-04/record-fixed.svg" />
</section>
<section>
<h3>Record Layout 2: Delimiters</h3>
<svg data-src="2021-05-04/record-separator.svg" />
</section>
<section>
<h3>Record Layout 2: Headers</h3>
<svg data-src="2021-05-04/record-header.svg" />
</section>
<section>
<dl>
<dt>File</dt>
<dd>A collection of pages (or records)</dd>
<dt>Page</dt>
<dd>A fixed-size collection of records</dd>
<dd style="font-size: smaller;">Page size is usually dictated by hardware.<br/>Mem Page $\approx$ 4K</dd>
td>bsp</dd>
td>bsp</dd>
td>nsp;Cache Line $\approx$ 64B</dd>
<dt>Record</dt>
<dd>One or more fields (for now)</dd>
<dt>Field</dt>
<dd>A primitive value (for now)</dd>
</dl>
</section>
</section>
<section>
<section>
<h3>Relational Algebra</h3>
<p>We start with a database <b>instance</b> with a fixed <b>schema</b></p>
<p class="fragment" style="margin-top: 40px;">
Queries are applied to Relations
$$Q(\textbf{Trees}, \textbf{SpeciesInfo})$$
</p>
<p class="fragment" style="margin-top: 40px;">
Queries are also Relations!
$$Q_2(\textbf{SpeciesInfo}, Q_1(\textbf{Trees}))$$
<span class="fragment" style="font-size: 50%; display: block; margin-top: 0px; margin-bottom: 10px;">(Relational Algebra is <u>Closed</u>)</span>
</p>
</section>
<section>
<h3>Relational Algebra</h3>
<table style="font-size: 70%">
<tr><th>Operation</th><th>Sym</th><th>Meaning</th></tr>
<tr><td>Selection</td><td>$\sigma$</td><td>Select a subset of the input rows</td></tr>
<tr><td>Projection</td><td>$\pi$</td><td>Delete unwanted columns</td></tr>
<tr><td>Cross-product</td><td>$\times$</td><td>Combine two relations</td></tr>
<tr><td>Set-difference</td><td>$-$</td><td>Tuples in Rel 1, but not Rel 2</td></tr>
<tr><td>Union</td><td>$\cup$</td><td>Tuples either in Rel 1 or in Rel 2</td></tr>
<tr><td>Intersection</td><td>$\cap$</td><td>Tuples in both Rel 1 and Rel 2</td></tr>
<tr><td>Join</td><td>$\bowtie$</td><td>Pairs of tuples matching a specified condition</td></tr>
<tr style="color: lightgrey;"><td>Division</td><td>$/$</td><td>"Inverse" of cross-product</td></tr>
<tr><td>Sort</td> <td>$\tau_A$</td><td>Sort records by attribute(s) $A$</td></tr>
<tr><td>Limit</td><td>$\texttt{LIMIT}_N$</td><td>Return only the first $N$ records<br/>(according to sort order if paired with sort).</td></tr>
</table>
</section>
<section>
<h3>RA Equivs</h3>
<p style="font-size: 80%;">
We say that $Q_1 \equiv Q_2$ if and only if<br/>
we can guarantee that the <i>bag</i> of tuples produced by $Q_1(R, S, T, \ldots)$ <br/>
is the same as the <i>bag</i> of tuples produced by $Q_2(R, S, T, \ldots)$ <br/>
for any combination of valid inputs $R, S, T, \ldots$.
</p>
<p style="font-size: 70%;" class="fragment">
... that satisfy any necessary properties.
</p>
</section>
<section>
<table style="font-size: 60%">
<tr>
<th>Rule</th><th>Notes</th>
</tr>
<tr>
<td>$\sigma_{C_1\wedge C_2}(R) \equiv \sigma_{C_1}(\sigma_{C_2}(R))$</td>
<td></td>
</tr>
<tr>
<td>$\sigma_{C_1\vee C_2}(R) \equiv \sigma_{C_1}(R) \cup \sigma_{C_2}(R)$</td>
<td>Note, this is only true for set, not bag union</td>
</tr>
<tr>
<td>$\sigma_C(R \times S) \equiv R \bowtie_C S$</td>
<td></td>
</tr>
<tr>
<td>$\sigma_C(R \times S) \equiv \sigma_C(R) \times S$</td>
<td>If $C$ references only $R$'s attributes, also works for joins</td>
</tr>
<tr>
<td>$\pi_{A}(\pi_{A \cup B}(R)) \equiv \pi_{A}(R)$</td>
<td></td>
</tr>
<tr>
<td>$\sigma_C(\pi_{A}(R)) \equiv \pi_A(\sigma_C(R))$</td>
<td>If $A$ contains all of the attributes referenced by $C$ </td>
</tr>
<tr>
<td>$\pi_{A\cup B}(R\times S) \equiv \pi_A(R) \times \pi_B(S)$</td>
<td>Where $A$ (resp., $B$) contains attributes in $R$ (resp., $S$)</td>
</tr>
<tr>
<td>$R \times (S \times T) \equiv (R \times S) \times T$</td>
<td>Also works for joins </td>
</tr>
<tr>
<td>$R \times S \equiv S \times R$</td>
<td>Also works for joins </td>
</tr>
<tr>
<td>$R \cup (S \cup T) \equiv (R \cup S) \cup T$</td>
<td>Also works for intersection and bag-union </td>
</tr>
<tr>
<td>$R \cup S \equiv S \cup R$</td>
<td>Also works for intersections and bag-union </td>
</tr>
<tr>
<td>$\sigma_{C}(R \cup S) \equiv \sigma_{C}(R) \cup \sigma_{C}(S)$</td>
<td>Also works for intersections and bag-union </td>
</tr>
<tr>
<td>$\pi_{A}(R \cup S) \equiv \pi_{A}(R) \cup \pi_{A}(S)$</td>
<td>Also works for intersections and bag-union </td>
</tr>
<tr>
<td>$\sigma_{C}(\gamma_{A, AGG}(R)) \equiv \gamma_{A, AGG}(\sigma_{C}(R))$</td>
<td>If $A$ contains all of the attributes referenced by $C$</td>
</tr>
</table>
</section>
</section>
<section>
<section>
<h3>Algorithms</h3>
<dl>
<dt>"Volcano" Operators (Iterators)</dt>
<dd>Operators "pull" tuples, one-at-a-time, from their children.</dd>
<dt>2-Pass (External) Sort</dt>
<dd>Create sorted runs, then repeatedly merge runs</dd>
<dt>Join Algorithms</dt>
<dd>Quickly picking out <i>specific</i> pairs of tuples.</dd>
<dt>Aggregation Algorithms</dt>
<dd>In-Memory vs 2-Pass, Normal vs Group-By</dd>
</dl>
</section>
<section>
<h3>Nested-Loop Join</h3>
<svg data-src="2021-05-04/Join-NLJ.svg" />
</section>
<section>
<h3>Block-Nested Loop Join</h3>
<svg data-src="2021-05-04/Join-BNLJ.svg" class="stretch" />
</section>
<section>
<h3>Strategies for Implementing $R \bowtie_{R.A = S.A} S$</h3>
<dl>
<dt>Sort/Merge Join</dt>
<dd>Sort all of the data upfront, then scan over both sides.</dd>
<dt>In-Memory Index Join (1-pass Hash; Hash Join)</dt>
<dd>Build an in-memory index on one table, scan the other.</dd>
<dt>Partition Join (2-pass Hash; External Hash Join)</dt>
<dd>Partition both sides so that tuples don't join across partitions.</dd>
</dl>
</section>
<section>
<h3>Sort/Merge Join</h3>
<svg data-src="2021-05-04/Join-SortMerge.svg" />
</section>
<section>
<h3>Sort/Merge Join</h3>
<img src="2021-05-04/Join-SortMerge.svg" />
<p>Sort/Merge typically expressed as 3 operators<br/>(2xSort + Merge)</p>
</section>
<section>
<h3>1-Pass Hash Join</h3>
<svg data-src="2021-05-04/Join-1PassHash.svg" />
</section>
<section>
<h3>2-Pass Hash Join</h3>
<dl>
<dt>Limited Queries</dt>
<dd>Only supports join conditions of the form $R.A = S.B$</dd>
<dt>Low Memory</dt>
<dd>Never need more than 1 pair of partitions in memory</dd>
<dt>High IO Cost</dt>
<dd>Every record gets written out to disk, and back in.</dd>
</dl>
<p class="fragment">Can partition on data-values to support other types of queries.</p>
</section>
<section>
<h3>Index Nested Loop Join</h3>
To compute $R \bowtie_{R.A < S.B} S$ with an index on $S.B$
<ol>
<li>Read One Row of $R$</li>
<li>Get the value of $R.A$</li>
<li>Start index scan on $S.B > [R.A]$</li>
<li>Return rows as normal</li>
</ol>
</section>
<section>
<h3>Basic Aggregate Pattern</h3>
<dl>
<dt>Init</dt>
<dd>Define a starting value for the accumulator</dd>
<dt>Fold(Accum, New)</dt>
<dd>Merge a new value into the accumulator</dd>
<dt>Finalize(Accum)</dt>
<dd>Extract the aggregate from the accumulator.</dd>
</dl>
</section>
<section>
<h3>Basic Aggregate Types</h3>
<p class="fragment" style="font-size: 60%">Grey et. al. "Data Cube: A Relational Aggregation Operator Generalizing Group-By, Cross-Tab, and Sub-Totals</p>
<dl>
<dt>Distributive</dt>
<dd>Finite-sized accumulator and doesn't need a finalize (COUNT, SUM)</dd>
<dt>Algebraic</dt>
<dd>Finite-sized accumulator but needs a finalize (AVG)</dd>
<dt>Holistic</dt>
<dd>Unbounded accumulator (MEDIAN)</dd>
</dl>
</section>
<section>
<h3>Grouping Algorithms</h3>
<dl>
<dt>2-pass Hash Aggregate</dt>
<dd>Like 2-pass Hash Join: Distribute groups across buckets, then do an in-memory aggregate for each bucket.</dd>
<dt>Sort-Aggregate</dt>
<dd>Like Sort-Merge Join: Sort data by groups, then group elements will be adjacent.</dd>
</dl>
</section>
</section>
<section>
<section>
<p>Cost-Based Optimization</p>
</section>
<section>
<h3>Accounting</h3>
<p style="margin-top: 50px;">Figure out the cost of each <b>individual</b> operator.</p>
<p style="margin-top: 50px;">Only count the number of IOs <b>added</b> by each operator.</p>
</section>
<section>
<table style="font-size: 70%">
<tr><th>Operation</th><th>RA</th><th>Total IOs (#pages)</th><th>Memory (#tuples)</th></tr>
<tr >
<td>Table Scan</td>
<td>$R$</td>
<td >$\frac{|R|}{\mathcal P}$</td>
<td >$O(1)$</td>
</tr>
<tr >
<td>Projection</td>
<td>$\pi(R)$</td>
<td >$\textbf{io}(R)$</td>
<td >$O(1)$</td>
</tr>
<tr >
<td>Selection</td>
<td>$\sigma(R)$</td>
<td>$\textbf{io}(R)$</td>
<td>$O(1)$</td>
</tr>
<tr >
<td>Union</td>
<td>$R \uplus S$</td>
<td>$\textbf{io}(R) + \textbf{io}(S)$</td>
<td>$O(1)$</td>
</tr>
<tr >
<td style="vertical-align: middle;">Sort <span >(In-Mem)</span></td>
<td style="vertical-align: middle;">$\tau(R)$</td>
<td >$\textbf{io}(R)$</td>
<td >$O(|R|)$</td>
</tr>
<tr>
<td >Sort (On-Disk)</td>
<td >$\tau(R)$</td>
<td >$\frac{2 \cdot \lfloor log_{\mathcal B}(|R|) \rfloor}{\mathcal P} + \textbf{io}(R)$</td>
<td >$O(\mathcal B)$</td>
</tr>
<tr >
<td><span >(B+Tree)</span> Index Scan</td>
<td>$Index(R, c)$</td>
<td >$\log_{\mathcal I}(|R|) + \frac{|\sigma_c(R)|}{\mathcal P}$</td>
<td >$O(1)$</td>
</tr>
<tr>
<td span >(Hash) Index Scan</td>
<td span >$Index(R, c)$</td>
<td >$1$</td>
<td >$O(1)$</td>
</tr>
</table>
<ol style="font-size: 50%; margin-top: 50px;">
<li >Tuples per Page ($\mathcal P$) <span> Normally defined per-schema</span></li>
<li >Size of $R$ ($|R|$)</li>
<li >Pages of Buffer ($\mathcal B$)</li>
<li >Keys per Index Page ($\mathcal I$)</li>
</ol>
</section>
<section>
<table style="font-size: 70%">
<tr><th width="300px">Operation</th><th>RA</th><th>Total IOs (#pages)</th><th style="font-size: 80%;">Mem (#tuples)</th></tr>
<tr >
<td style="font-size: 60%">Nested Loop Join <span >(Buffer $S$ in mem)</span></td>
<td>$R \times_{mem} S$</td>
<td >$\textbf{io}(R)+\textbf{io}(S)$</td>
<td >$O(|S|)$</td>
</tr>
<tr>
<td style="font-size: 60%">Block NLJ (Buffer $S$ on disk)</td>
<td >$R \times_{disk} S$</td>
<td >$\frac{|R|}{\mathcal B} \cdot \frac{|S|}{\mathcal P} + \textbf{io}(R) + \textbf{io}(S)$</td>
<td >$O(1)$</td>
</tr>
<tr>
<td style="font-size: 60%">Block NLJ (Recompute $S$)</td>
<td >$R \times_{redo} S$</td>
<td >$\textbf{io}(R) + \frac{|R|}{\mathcal B} \cdot \textbf{io}(S)$</td>
<td >$O(1)$</td>
</tr>
<tr >
<td>1-Pass Hash Join</td>
<td>$R \bowtie_{1PH, c} S$</td>
<td >$\textbf{io}(R) + \textbf{io}(S)$</td>
<td >$O(|S|)$</td>
</tr>
<tr >
<td>2-Pass Hash Join</td>
<td>$R \bowtie_{2PH, c} S$</td>
<td >$\frac{2|R| + 2|S|}{\mathcal P} + \textbf{io}(R) + \textbf{io}(S)$</td>
<td >$O(1)$</td>
</tr>
<tr >
<td>Sort-Merge Join </td>
<td>$R \bowtie_{SM, c} S$</td>
<td >[Sort]</td>
<td >[Sort]</td>
</tr>
<tr >
<td><span >(Tree)</span> Index NLJ</td>
<td>$R \bowtie_{INL, c}$</td>
<td >$|R| \cdot (\log_{\mathcal I}(|S|) + \frac{|\sigma_c(S)|}{\mathcal P})$</td>
<td >$O(1)$</td>
</tr>
<tr>
<td >(Hash) Index NLJ</td>
<td >$R \bowtie_{INL, c}$</td>
<td >$|R| \cdot 1$</td>
<td >$O(1)$</td>
</tr>
<tr >
<td><span >(In-Mem)</span> Aggregate</td>
<td>$\gamma_A(R)$</td>
<td >$\textbf{io}(R)$</td>
<td >$adom(A)$</td>
</tr>
<tr>
<td style="font-size: 90%">(Sort/Merge) Aggregate</td>
<td >$\gamma_A(R)$</td>
<td >[Sort]</td>
<td >[Sort]</td>
</tr>
</table>
<ol style="font-size: 50%;">
<li>Tuples per Page ($\mathcal P$) <span> Normally defined per-schema</span></li>
<li>Size of $R$ ($|R|$)</li>
<li>Pages of Buffer ($\mathcal B$)</li>
<li>Keys per Index Page ($\mathcal I$)</li>
<li>Number of distinct values of $A$ ($adom(A)$)</li>
</ol>
</section>
<section>
<p>Estimating IOs requires Estimating $|Q(R)|$</p>
</section>
<section>
<table style="font-size: 70%">
<tr>
<th>Operator</th>
<th>RA</th>
<th>Estimated Size</th>
</tr>
<tr>
<td>Table</td>
<td>$R$</td>
<td>$|R|$</td>
</tr>
<tr>
<td>Projection</td>
<td>$\pi(Q)$</td>
<td>$|Q|$</td>
</tr>
<tr>
<td>Union</td>
<td>$Q_1 \uplus Q_2$</td>
<td>$|Q_1| + |Q_2|$</td>
</tr>
<tr>
<td>Cross Product</td>
<td>$Q_1 \times Q_2$</td>
<td>$|Q_1| \times |Q_2|$</td>
</tr>
<tr>
<td>Sort</td>
<td>$\tau(Q)$</td>
<td>$|Q|$</td>
</tr>
<tr>
<td>Limit</td>
<td>$\texttt{LIMIT}_N(Q)$</td>
<td>$N$</td>
</tr>
<tr>
<td>Selection</td>
<td>$\sigma_c(Q)$</td>
<td>$|Q| \times \texttt{SEL}(c, Q)$</td>
</tr>
<tr>
<td>Join</td>
<td>$Q_1 \bowtie_c Q_2$</td>
<td>$|Q_1| \times |Q_2| \times \texttt{SEL}(c, Q_1\times Q_2)$</td>
</tr>
<tr>
<td>Distinct</td>
<td>$\delta_A(Q)$</td>
<td>$\texttt{UNIQ}(A, Q)$</td>
</tr>
<tr>
<td>Aggregate</td>
<td>$\gamma_{A, B \leftarrow \Sigma}(Q)$</td>
<td>$\texttt{UNIQ}(A, Q)$</td>
</tr>
</table>
<ul style="font-size: 50%; margin-top: 20px">
<li>$\texttt{SEL}(c, Q)$: Selectivity of $c$ on $Q$, or $\frac{|\sigma_c(Q)|}{|Q|}$</li>
<li>$\texttt{UNIQ}(A, Q)$: # of distinct values of $A$ in $Q$.</li>
</ul>
</section>
<section>
<h3>(Some) Estimation Techniques</h3>
<dl style="font-size: 80%">
<div class="fragment">
<dt>Guess Randomly</dt>
<dd>Rules of thumb if you have no other options...</dd>
</div>
<div class="fragment">
<dt>Uniform Prior</dt>
<dd>Use basic statistics to make a very rough guess.</dd>
</div>
<div class="fragment">
<dt>Sampling / History</dt>
<dd>Small, Quick Sampling Runs (or prior executions of the query).</dd>
</div>
<div class="fragment">
<dt>Histograms</dt>
<dd>Using more detailed statistics for improved guesses.</dd>
</div>
<div class="fragment">
<dt>Constraints</dt>
<dd>Using rules about the data for improved guesses.</dd>
</div>
</dl>
</section>
</section>
<section>
<section>
<h3>Sketching</h3>
</section>
<section>
<table>
<tr><th>Flips</th><th>Score</th><th>Probability</th>
<th data-fragment-index="1">E[# Games]</th>
</tr>
<tr><td>(👽)</td><td>0</td><td>0.5</td>
<td data-fragment-index="1">2</td>
</tr>
<tr><td>(🐕)(👽)</td><td>1</td><td>0.25</td>
<td data-fragment-index="1">4</td>
</tr>
<tr><td>(🐕)(🐕)(👽)</td><td>2</td><td>0.125</td>
<td data-fragment-index="1">8</td>
</tr>
<tr><td>(🐕)$\times N$ &nbsp;&nbsp;(👽)</td><td>$N$</td><td>$\frac{1}{2^{N+1}}$</td>
<td>$2^{N+1}$</td>
</tr>
</table>
<p style="margin-top: 50px;">If I told you that in a series of games, my best score was $N$, you might expect that I played $2^{N+1}$ games.</p>
<p style="margin-top: 50px;">To do that, I only need to track my top score!</p>
</section>
<section>
<h3>Flajolet-Martin Sketches</h3>
<h4>($\approx$ HyperLogLog)</h4>
<ol>
<li>For each record...
<ol>
<li>Hash each record</li>
<li>Find the index of the lowest-order non-zero bit</li>
<li>Add the index of the bit to a set</li>
</ol></li>
<li>Find $R$, the lowest index <b>not</b> in the set</li>
<li>Estimate Count-Distinct as $\frac{2^R}{\phi}$ ($\phi \approx 0.77351$)</li>
<li>Repeat (in parallel) as needed</li>
</ol>
</section>
<section>
<h3>Count Sketches</h3>
<ol>
<li>Pick a number of "trials" and a number of "bins"</li>
<li>For each record $O_i$
<ol>
<li>For each "trial" $j$
<ol>
<li>Use a hash function $h_j(O_i)$ to pick a bin</li>
<li>Add a $\pm 1$ value determined by hash function $\delta_j(O_i)$ to the bin</li>
</ol>
</li>
</ol>
</ol></li>
<li>For each trial $j$, estimate the count of $O_i$ by the value of bin $h_j(O_i)$</li>
<li>Take the <em>median</em> value for all trials.</li>
</ol>
</section>
<section>
<h3>Count-Min Sketches</h3>
<ol>
<li>Pick a number of "trials" and a number of "bins"</li>
<li>For each record $O_i$
<ol>
<li>For each "trial" $j$
<ol>
<li>Use a hash function $h_j(O_i)$ to pick a bin</li>
<li>Add 1 to the bin</li>
</ol>
</li>
</ol>
</ol></li>
<li>For each trial $j$, estimate the count of $O_i$ by the value of bin $h_j(O_i)$</li>
<li>Take the <em>minimum</em> value for all trials.</li>
</ol>
</section>
<section>
<dl>
<dt>Flajolet-Martin Sketches (HyperLogLog)</dt>
<dd>Estimating Count-Distinct</dd>
<dt>Count Sketches</dt>
<dd>Estimating Count-GroupBy<br/>(roughly uniform counts)</dd>
<dt>Count-Min Sketches</dt>
<dd>Estimating Count-GroupBy<br/>(small number of heavy hitters)</dd>
</dl>
</section>
</section>
<section>
<section>
<div style="font-size: 100%;">
$$\texttt{WHEN } \mathcal D \leftarrow \mathcal{D}+\Delta\mathcal D \texttt{ DO:}~~~~\\
\texttt{VIEW} \leftarrow \texttt{VIEW} + \Delta Q(\mathcal D,\Delta\mathcal D)$$
</div>
<table style="margin-top: 50px;">
<tr class="fragment">
<td style="font-size: 100%;">$\Delta Q$</td>
<td>(ideally) Small &amp; fast query</td>
</tr>
<tr class="fragment">
<td style="font-size: 100%;">$+$</td>
<td>(ideally) Fast "merge" operation</td>
</tr>
</table>
</section>
<section>
<h3>Intuition</h3>
<div>
$$\mathcal{R} = \{\ \textbf{A, B, C}\ \},\ \mathcal S = \{\ \textbf{X, Y}\ \} ~~~\Delta\mathcal{R} = \{\ \textbf{D}\ \}$$
$$Q(\mathcal R, \mathcal S) = \texttt{COUNT}(\mathcal R \times \mathcal S)$$
</div>
<div style="margin-top: 50px;">
<div class="fragment">$$ \texttt{COUNT}(\textbf{AX, AY, BX, BY, CX, CY, }\underline{\textbf{DX, DY}}) $$</div>
<div class="fragment">$$Q(\mathcal R+\Delta\mathcal R, \mathcal S) \sim O( (|\mathcal R| + |\Delta\mathcal D|) \cdot |\mathcal S|)$$</div>
</div>
<div style="margin-top: 50px;">
<div class="fragment">$$ 6 + \texttt{COUNT}(\underline{\textbf{DX, DY}}) $$</div>
<div class="fragment">$$\texttt{VIEW} + \texttt{COUNT}(\Delta\mathcal R \times \mathcal S) \sim O(|\Delta\mathcal R| \cdot |\mathcal S|)$$</div>
</div>
</section>
<section>
<p>$\sigma(\mathcal R) \rightarrow \sigma(\mathcal R \uplus \Delta \mathcal R)$</p>
<p class="fragment" data-fragment-index="1">
$ \equiv $
<span class="fragment highlight-red" data-fragment-index="2">$\sigma(\mathcal R)$</span>
$ \uplus $
<span class="fragment highlight-blue" data-fragment-index="3">$\sigma(\Delta \mathcal R)$</span>
</p>
<div style="margin-top: 50px; font-size: 80%;">
<p class="fragment" data-fragment-index="2" style="color: red;">$Q(\mathcal D) = \sigma(\mathcal R)$</p>
<p class="fragment" data-fragment-index="3" style="color: #1b91ff;">$\Delta Q(\mathcal D, \Delta \mathcal D) = \sigma(\Delta \mathcal R)$</p>
</div>
<p class="fragment" data-fragment-index="4">Set/Bag difference also commutes through selection</p>
</section>
<section>
<p>$\pi(\mathcal R) \rightarrow \pi(\mathcal R \uplus \Delta \mathcal R)$</p>
<p class="fragment" data-fragment-index="1">
$ \equiv $
<span class="fragment highlight-red" data-fragment-index="2">$\pi(\mathcal R)$</span>
$ \uplus $
<span class="fragment highlight-blue" data-fragment-index="3">$\pi(\Delta \mathcal R)$</span>
</p>
<div style="margin-top: 50px; font-size: 80%;">
<p class="fragment" data-fragment-index="2" style="color: red;">$Q(\mathcal D) = \pi(\mathcal R)$</p>
<p class="fragment" data-fragment-index="3" style="color: #1b91ff;">$\Delta Q(\mathcal D, \Delta \mathcal D) = \pi(\Delta \mathcal R)$</p>
</div>
<p class="fragment" data-fragment-index="4">Does this work under set semantics?</p>
</section>
<section>
<p>$\mathcal R_1 \uplus \mathcal R_2 \rightarrow \mathcal R_1 \uplus \Delta \mathcal R_1 \uplus \mathcal R_2 \uplus \Delta \mathcal R_2$</p>
<p class="fragment" data-fragment-index="1">
$ \equiv $
<span class="fragment highlight-red" data-fragment-index="2">$\mathcal R_1 \uplus \mathcal R_2$</span>
$ \uplus $
<span class="fragment highlight-blue" data-fragment-index="3">$\Delta \mathcal R_1 \uplus \Delta \mathcal R_2$</span>
</p>
<div style="margin-top: 50px; font-size: 80%;">
<p class="fragment" data-fragment-index="2" style="color: red;">$Q(\mathcal D) = \mathcal R_1 \uplus \mathcal R_2$</p>
<p class="fragment" data-fragment-index="3" style="color: #1b91ff;">$\Delta Q(\mathcal D, \Delta \mathcal D) = \Delta \mathcal R_1 \uplus \Delta \mathcal R_2$</p>
</div>
</section>
<section>
<div>
$$(\mathcal R_1 \uplus \Delta \mathcal R_1) \times (\mathcal R_2 \uplus \Delta \mathcal R_2)$$
</div>
<div style="margin-top: 50px;" class="fragment">
$$\left(\mathcal R_1 \times (\mathcal R_2 \uplus \Delta \mathcal R_2)\right) \uplus \left(\Delta \mathcal R_1 \times (\mathcal R_2 \uplus \Delta \mathcal R_2)\right)$$
</div>
<div style="margin-top: 50px;" class="fragment">
$$\left(\mathcal R_1 \times \mathcal R_2\right) \uplus \left(\mathcal R_1 \times \Delta \mathcal R_2\right) \uplus \left(\Delta \mathcal R_1 \times (\mathcal R_2 \uplus \Delta \mathcal R_2)\right)$$
</div>
<div style="margin-top: 50px; font-size: 90%" class="fragment">
$$\left(\mathcal R_1 \times \mathcal R_2\right) \uplus \left(\mathcal R_1 \times \Delta \mathcal R_2\right) \uplus \left(\Delta \mathcal R_1 \times \mathcal R_2\right) \uplus \left(\Delta \mathcal R_1 \times \Delta \mathcal R_2\right)$$
</div>
</section>
</section>

View file

@ -0,0 +1,320 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="119.59167mm"
height="137.58333mm"
viewBox="0 0 119.59167 137.58333"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="2019-04-10-ARIES.svg">
<defs
id="defs2">
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker2538"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lend">
<path
transform="scale(1.1) rotate(180) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path2536" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Lend"
style="overflow:visible;"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1059"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker2434"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path2432"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.8) rotate(180) translate(12.5,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1966"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path1964"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#008000;stroke-width:1pt;stroke-opacity:1;fill:#008000;fill-opacity:1"
transform="scale(0.8) rotate(180) translate(12.5,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker1660"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:collect="always">
<path
transform="scale(0.8) rotate(180) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path1658" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Lend"
style="overflow:visible;"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1041"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
transform="scale(0.8) rotate(180) translate(12.5,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="171.41188"
inkscape:cy="119.48249"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-11.26368,-7.4702401)">
<text
id="text1022"
y="125.62825"
x="45.82225"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:33.20000172%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
id="tspan1020"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332"
y="125.62825"
x="45.82225"
sodipodi:role="line">CRASH</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05999995, 1.05999995;stroke-dashoffset:0;stroke-opacity:1"
d="m 58.991705,123.28709 69.389475,0"
id="path1026"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<g
id="g2601"
class="fragment">
<text
id="text1005"
y="90.174118"
x="45.82225"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:33.20000172%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332"
y="90.174118"
x="45.82225"
sodipodi:role="line"
id="tspan1003">Last Complete</tspan><tspan
id="tspan1016"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332"
y="97.229675"
x="45.82225"
sodipodi:role="line">Checkpoint</tspan></text>
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05999995, 1.05999995;stroke-dashoffset:0;stroke-opacity:1"
d="M 70.757875,96.29957 H 128.38118"
id="path1028"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path1034"
d="M 96.576106,96.299569 V 122.22875"
style="fill:#0000ff;stroke:#0000ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
<text
id="text2420"
y="139.90074"
x="93.080116"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:33.20000172%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="fill:#0000ff;stroke-width:0.26458332"
y="139.90074"
x="93.080116"
id="tspan2418"
sodipodi:role="line">A</tspan></text>
</g>
<g
id="g2612"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:33.20000172%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="45.82225"
y="58.424126"
id="text976"><tspan
sodipodi:role="line"
x="46.945351"
y="58.424126"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332"
id="tspan974">Earliest log </tspan><tspan
id="tspan983"
sodipodi:role="line"
x="45.82225"
y="65.479683"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332">timestamp in dirty</tspan><tspan
id="tspan987"
sodipodi:role="line"
x="45.82225"
y="72.535233"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332">page table after</tspan><tspan
id="tspan991"
sodipodi:role="line"
x="45.82225"
y="79.59079"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332">Analysis</tspan></text>
<path
inkscape:connector-curvature="0"
id="path1030"
d="M 79.363954,63.491234 H 128.38118"
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05999995, 1.05999995;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cc"
style="fill:#ff0000;stroke:#ff0000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1660)"
d="M 109.27612,63.371963 V 122.22875"
id="path1656"
inkscape:connector-curvature="0" />
<text
id="text2424"
y="139.90074"
x="105.40137"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:33.20000172%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="fill:#ff0000;stroke-width:0.26458332"
y="139.90074"
x="105.40137"
id="tspan2422"
sodipodi:role="line">R</tspan></text>
</g>
<g
id="g2622"
class="fragment">
<text
id="text960"
y="18.207457"
x="45.82225"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:33.20000172%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
id="tspan962"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332"
y="18.207457"
x="45.82225"
sodipodi:role="line">Oldest log record</tspan><tspan
id="tspan966"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332"
y="25.263012"
x="45.82225"
sodipodi:role="line">of transaction</tspan><tspan
id="tspan968"
style="font-size:7.05555534px;line-height:100%;text-align:center;text-anchor:middle;stroke-width:0.26458332"
y="32.318565"
x="45.82225"
sodipodi:role="line">active at crash</tspan></text>
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05999995, 1.05999995;stroke-dashoffset:0;stroke-opacity:1"
d="M 73.002939,23.274566 H 128.38118"
id="path1032"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path1962"
d="M 120.91786,123.19944 V 23.931503"
style="fill:#008000;stroke:#008000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1966)"
sodipodi:nodetypes="cc" />
<text
id="text2428"
y="139.90074"
x="117.01189"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:33.20000172%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="fill:#008000;stroke-width:0.26458332"
y="139.90074"
x="117.01189"
id="tspan2426"
sodipodi:role="line">U</tspan></text>
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="M 81.814496,23.274566 V 122.22875"
id="path2430"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path2534"
d="m 81.814496,10.552537 0,108.121533"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="54.508305mm"
height="33.114536mm"
viewBox="0 0 54.508305 33.114536"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="2019-03-27-DependencyCycle.svg">
<defs
id="defs2">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path830"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1117"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1115"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lstart"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path827"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="50.901407"
inkscape:cy="20.672793"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-27.939232,-62.633103)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1000;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="27.970238"
y="82.995712"
id="text817"><tspan
sodipodi:role="line"
id="tspan815"
x="27.970238"
y="82.995712"
style="stroke-width:0.26458332">T1</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1000;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="70.303574"
y="83.065475"
id="text821"><tspan
sodipodi:role="line"
id="tspan819"
x="70.303574"
y="83.065475"
style="stroke-width:0.26458332">T2</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 75.595238,73.72945 c -12.365465,-13.437121 -25.497805,-15.754545 -39.876488,0"
id="path823"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
id="path825"
d="m 75.595238,84.841955 c -13.836302,14.470732 -27.047194,14.257365 -39.876488,0"
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1000;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="53.483635"
y="69.836311"
id="text1339"><tspan
sodipodi:role="line"
id="tspan1337"
x="53.483635"
y="69.836311"
style="font-size:7.05555534px;stroke-width:0.26458332">B</tspan></text>
<text
id="text1343"
y="94.404762"
x="53.483635"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1000;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;stroke-width:0.26458332"
y="94.404762"
x="53.483635"
id="tspan1341"
sodipodi:role="line">A</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -0,0 +1,423 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="185.3418mm"
height="107.16741mm"
viewBox="0 0 185.3418 107.16741"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="2018-02-12-Flow-Cross.svg">
<defs
id="defs2">
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker10141"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path10139"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Lend"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path868"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker9660"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path9658"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker8965"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path8963"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker7249"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
inkscape:connector-curvature="0"
id="path7247"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker5139"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path5137"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4462"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
inkscape:connector-curvature="0"
id="path4460"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker3960"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3958"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1227"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1225"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1193"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1191"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="331.24022"
inkscape:cy="251.75303"
inkscape:document-units="mm"
inkscape:current-layer="g8961"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(23.819361,-13.025584)">
<g
id="g9869">
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path40"
d="m 129.79702,13.026488 0.0756,20.902083"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<text
id="text3432"
y="21.11385"
x="131.89551"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;stroke-width:0.26458332"
y="21.11385"
x="131.89551"
id="tspan3430"
sodipodi:role="line">start</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="94.508446"
y="45.230064"
id="text12"
class="fragment"><tspan
sodipodi:role="line"
id="tspan10"
x="94.508446"
y="45.230064"
style="stroke-width:0.26458332">Have Old 'r'?</tspan></text>
<g
id="g8961"
class="fragment"
transform="translate(-39.952084,-46.566667)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="113.11009"
y="88.318016"
id="text8953"><tspan
sodipodi:role="line"
id="tspan8951"
x="113.11009"
y="88.318016"
style="font-size:7.05555534px;stroke-width:0.26458332">no</tspan></text>
<text
id="text8957"
y="68.449379"
x="17.008928"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="68.449379"
x="17.008928"
id="tspan8955"
sodipodi:role="line">Read LHS Row 'r'</tspan><tspan
style="stroke-width:0.26458332"
y="81.678543"
x="17.008928"
sodipodi:role="line"
id="tspan10281">and Reset RHS</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path8959"
d="M 133.46339,85.862501 97.97143,76.526488"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8965)" />
</g>
<g
id="g9929"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="57.490177"
y="81.94313"
id="text5083"><tspan
sodipodi:role="line"
id="tspan5081"
x="57.490177"
y="81.94313"
style="stroke-width:0.26458332">Read RHS Row 's'</tspan></text>
<text
id="text9648"
y="60.801346"
x="53.843437"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;stroke-width:0.26458332"
y="60.801346"
x="53.843437"
id="tspan9646"
sodipodi:role="line">not empty</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9660)"
d="m 41.652975,38.502083 17.160118,32.99732"
id="path9654"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
id="g9644"
transform="translate(-0.26458367,56.35625)"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="98.028847"
y="39.634682"
id="text3391"><tspan
sodipodi:role="line"
id="tspan3389"
x="98.028847"
y="39.634682"
style="font-size:7.05555534px;stroke-width:0.26458332">not empty</tspan></text>
<text
id="text16"
y="63.686882"
x="70.719345"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="63.686882"
x="70.719345"
id="tspan14"
sodipodi:role="line">Return &lt;r s&gt;</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path32"
d="M 88.219642,27.91875 104.85059,53.243153"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7249)" />
</g>
<g
id="g9907"
class="fragment">
<text
id="text5079"
y="61.330517"
x="117.60801"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;stroke-width:0.26458332"
y="61.330517"
x="117.60801"
id="tspan5077"
sodipodi:role="line">yes</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker10141)"
d="m 121.55714,48.820834 -15.11905,22.67857"
id="path5085"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
transform="translate(-143.13958,-8.9958333)"
class="fragment"
id="g3932">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="126.65983"
y="82.309517"
id="text3924"><tspan
sodipodi:role="line"
id="tspan3922"
x="126.65983"
y="82.309517"
style="stroke-width:0.26458332">Done</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4462)"
d="m 146.84375,46.628571 -8.20208,24.984226"
id="path3926"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
id="text3930"
y="58.420097"
x="118.93092"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;stroke-width:0.26458332"
y="58.420097"
x="118.93092"
id="tspan3928"
sodipodi:role="line">empty</tspan></text>
</g>
<g
id="g5135"
class="fragment"
transform="translate(-22.754167,35.983333)">
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path5129"
d="M 86.783333,51.126488 C 59.680757,74.970227 41.200165,10.149137 39.612512,1.2878217"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5139)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="44.847588"
y="58.420097"
id="text5133"><tspan
sodipodi:role="line"
id="tspan5131"
x="44.847588"
y="58.420097"
style="font-size:7.05555534px;stroke-width:0.26458332">empty</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,252 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="162.57216mm"
height="105.71951mm"
viewBox="0 0 162.57216 105.71951"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="2018-02-12-Flow-Project.svg">
<defs
id="defs2">
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1227"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1225"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1193"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1191"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1165"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1163"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1143"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1141"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path850"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="42.71157"
inkscape:cy="326.28069"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-7.012178,-13.025584)">
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 95.930357,13.026488 0.07559,20.902083"
id="path40"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="56.143864"
y="46.023815"
id="text12"
class="fragment"><tspan
sodipodi:role="line"
id="tspan10"
x="56.143864"
y="46.023815"
style="stroke-width:0.26458332">Read One Row</tspan></text>
<g
id="g3198"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="37.439262"
y="59.478432"
id="text3391"><tspan
sodipodi:role="line"
id="tspan3389"
x="37.439262"
y="59.478432"
style="font-size:7.05555534px;stroke-width:0.26458332">not empty</tspan></text>
<text
id="text16"
y="82.472298"
x="19.65476"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="82.472298"
x="19.65476"
id="tspan14"
sodipodi:role="line">Compute New Row</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path32"
d="M 82.398808,48.291667 67.27976,70.970237"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1165)" />
</g>
<g
id="g3232"
class="fragment">
<text
id="text24"
y="118.59524"
x="36.537827"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="118.59524"
x="36.537827"
id="tspan22"
sodipodi:role="line">Return Row</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path36"
d="M 65.578867,86.089285 65.389881,108.61667"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1227)" />
</g>
<g
id="g3215"
class="fragment">
<text
id="text20"
y="82.309517"
x="139.09525"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="82.309517"
x="139.09525"
id="tspan18"
sodipodi:role="line">Done!</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path34"
d="m 121.70833,49.803571 15.875,18.898809"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1143)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="130.57259"
y="59.213848"
id="text3377"><tspan
sodipodi:role="line"
id="tspan3375"
x="130.57259"
y="59.213848"
style="font-size:7.05555534px;stroke-width:0.26458332">empty</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="98.028847"
y="21.11385"
id="text3432"><tspan
sodipodi:role="line"
id="tspan3430"
x="98.028847"
y="21.11385"
style="font-size:7.05555534px;stroke-width:0.26458332">start</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,285 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="162.57216mm"
height="105.71951mm"
viewBox="0 0 162.57216 105.71951"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="2018-02-12-Flow-Select.svg">
<defs
id="defs2">
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1227"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1225"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1193"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1191"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1165"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1163"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1143"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1141"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path850"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="42.71157"
inkscape:cy="326.28069"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-7.012178,-13.025584)">
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 95.930357,13.026488 0.07559,20.902083"
id="path40"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="56.143864"
y="46.023815"
id="text12"
class="fragment"><tspan
sodipodi:role="line"
id="tspan10"
x="56.143864"
y="46.023815"
style="stroke-width:0.26458332">Read One Row</tspan></text>
<g
id="g3198"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="37.439262"
y="59.743015"
id="text3391"><tspan
sodipodi:role="line"
id="tspan3389"
x="37.439262"
y="59.743015"
style="font-size:7.05555534px;stroke-width:0.26458332">not empty</tspan></text>
<text
id="text16"
y="82.472298"
x="19.65476"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="82.472298"
x="19.65476"
id="tspan14"
sodipodi:role="line">Check Condition</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path32"
d="M 82.398808,48.291667 67.27976,70.970237"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1165)" />
</g>
<g
id="g3232"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="80.830925"
y="93.345093"
id="text3383"><tspan
sodipodi:role="line"
id="tspan3381"
x="80.830925"
y="93.345093"
style="font-size:7.05555534px;stroke-width:0.26458332">satisfied</tspan></text>
<text
id="text24"
y="118.59524"
x="64.319077"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="118.59524"
x="64.319077"
id="tspan22"
sodipodi:role="line">Return Row</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path36"
d="M 74.839284,86.089285 89.202381,106.5"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1227)" />
</g>
<g
id="g3416"
class="fragment">
<path
class=""
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path38"
d="m 45.357142,86.089285 c 0,0 -9.751785,23.812495 -27.214285,21.166665 C 6.7657737,105.13928 6.7657738,74.069643 7.5595238,56.607143 c 0,-14.022917 5.7844582,-34.311254 27.2898812,-38.780357 20.396751,-0.385142 30.1625,16.101785 30.1625,16.101785"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1193)" />
<text
id="text3387"
y="112.92427"
x="10.187177"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;stroke-width:0.26458332"
y="112.92427"
x="10.187177"
id="tspan3385"
sodipodi:role="line">unsatisfied</tspan></text>
</g>
<g
id="g3215"
class="fragment">
<text
id="text20"
y="82.309517"
x="139.09525"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="82.309517"
x="139.09525"
id="tspan18"
sodipodi:role="line">Done!</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path34"
d="m 121.70833,49.803571 15.875,18.898809"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1143)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="130.57259"
y="59.213848"
id="text3377"><tspan
sodipodi:role="line"
id="tspan3375"
x="130.57259"
y="59.213848"
style="font-size:7.05555534px;stroke-width:0.26458332">empty</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="98.028847"
y="21.11385"
id="text3432"><tspan
sodipodi:role="line"
id="tspan3430"
x="98.028847"
y="21.11385"
style="font-size:7.05555534px;stroke-width:0.26458332">start</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,372 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="173.15916mm"
height="103.56505mm"
viewBox="0 0 173.15917 103.56505"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="2018-02-12-Flow-Union.svg">
<defs
id="defs2">
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker1886"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lend">
<path
transform="scale(1.1) rotate(180) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path1884" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker1816"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lend">
<path
transform="scale(1.1) rotate(180) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path1814" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker1752"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lend">
<path
transform="scale(1.1) rotate(180) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path1750" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1688"
style="overflow:visible;"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1686"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Lend"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path1431"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker1228"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path1226"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1089"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1087"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1047"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1045"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker3960"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3958"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1227"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1225"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1193"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1191"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-193.9972"
inkscape:cy="198.13782"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-20.693457,-13.025584)">
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1886)"
d="m 95.930357,13.026488 0.07559,20.902083"
id="path40"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="98.028847"
y="21.11385"
id="text3432"><tspan
sodipodi:role="line"
id="tspan3430"
x="98.028847"
y="21.11385"
style="font-size:7.05555534px;stroke-width:0.26458332">start</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="56.143864"
y="46.023815"
id="text12"
class="fragment"><tspan
sodipodi:role="line"
id="tspan10"
x="56.143864"
y="46.023815"
style="stroke-width:0.26458332">Read LHS Row</tspan></text>
<g
id="g3198"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="37.703846"
y="59.743015"
id="text3391"><tspan
sodipodi:role="line"
id="tspan3389"
x="37.703846"
y="59.743015"
style="font-size:7.05555534px;stroke-width:0.26458332">not empty</tspan></text>
<text
id="text16"
y="82.472298"
x="19.65476"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="82.472298"
x="19.65476"
id="tspan14"
sodipodi:role="line">Return Row</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path32"
d="M 82.398808,48.291667 67.27976,70.970237"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1688)" />
</g>
<g
transform="translate(-8.2020834,-0.52916667)"
class="fragment"
id="g3932">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="125.07233"
y="82.309517"
id="text3924"><tspan
sodipodi:role="line"
id="tspan3922"
x="125.07233"
y="82.309517"
style="stroke-width:0.26458332">Read RHS Row</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1816)"
d="m 120.65,48.745238 17.99167,22.867559"
id="path3926"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
id="text3930"
y="59.213848"
x="130.57259"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;stroke-width:0.26458332"
y="59.213848"
x="130.57259"
id="tspan3928"
sodipodi:role="line">empty</tspan></text>
</g>
<g
class="fragment"
id="g3956"
transform="translate(57.414583,44.45)">
<text
id="text3948"
y="45.190933"
x="30.824678"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:7.05555534px;stroke-width:0.26458332"
y="45.190933"
x="30.824678"
id="tspan3946"
sodipodi:role="line">not empty</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1752)"
d="M 56.998808,33.475 25.475593,33.663987"
id="path3954"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
id="g3215"
class="fragment"
transform="translate(-3.175,34.13125)">
<text
id="text20"
y="82.309517"
x="139.09525"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="82.309517"
x="139.09525"
id="tspan18"
sodipodi:role="line">Done!</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path34"
d="M 151.87083,50.597321 152.4,72.406547"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="126.86842"
y="68.474266"
id="text3377"><tspan
sodipodi:role="line"
id="tspan3375"
x="126.86842"
y="68.474266"
style="font-size:7.05555534px;stroke-width:0.26458332">empty</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,430 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="141.67162mm"
height="80.71843mm"
viewBox="0 0 501.98604 286.01019"
id="svg4281"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="2018-02-12-Join-1PassHash.svg">
<defs
id="defs4283" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="306.9147"
inkscape:cy="123.17883"
inkscape:document-units="px"
inkscape:current-layer="g8432"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1388"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata4286">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-60.364196,-146.85447)">
<g
id="g8400">
<rect
y="179.89833"
x="177.75493"
height="108.78987"
width="188.7899"
id="rect8348"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.61618328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.61618328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect8350"
width="188.7899"
height="108.78987"
x="177.75493"
y="291.3269" />
<text
sodipodi:linespacing="125%"
id="text8352"
y="282.86465"
x="279.29282"
style="font-style:normal;font-weight:normal;font-size:20.00000191px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="282.86465"
x="279.29282"
id="tspan8354"
sodipodi:role="line">h(A) = 0</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:20.00000191px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="279.29282"
y="394.29324"
id="text8356"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8358"
x="279.29282"
y="394.29324">h(A) = 1</tspan></text>
</g>
<g
id="g8474">
<g
class="fragment"
id="g4208">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471"
width="96.428566"
height="64.285713"
x="61.250008"
y="148.79077" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="194.5051"
id="text5040"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5042"
x="107.99999"
y="194.5051">1</tspan></text>
</g>
<g
transform="matrix(0.37283942,0,0,0.37283942,188.92948,137.71923)"
id="g8368"
class="fragment">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect8370"
width="96.428566"
height="64.285713"
x="61.250008"
y="212.50505" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="260.21939"
id="text8372"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8374"
x="107.99999"
y="260.21939">1</tspan></text>
</g>
<g
class="fragment"
id="g4213">
<rect
y="212.50505"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4837"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text5044"
y="260.21939"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="107.99999"
id="tspan5046"
sodipodi:role="line">3</tspan></text>
</g>
<g
id="g8392"
transform="matrix(0.37283942,0,0,0.37283942,240.7152,257.3621)"
class="fragment">
<rect
y="212.50505"
x="-77.6455"
height="64.285713"
width="96.428566"
id="rect8394"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text8396"
y="260.21939"
x="-30.895515"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="-30.895515"
id="tspan8398"
sodipodi:role="line">3</tspan></text>
</g>
<g
class="fragment"
id="g8341">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4839"
width="96.428566"
height="64.285713"
x="61.250008"
y="276.21933" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="323.07654"
id="text5048"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5050"
x="107.99999"
y="323.07654">2</tspan></text>
</g>
<g
id="g8376"
transform="matrix(0.37283942,0,0,0.37283942,228.2152,137.71923)"
class="fragment">
<rect
y="212.50505"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect8378"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text8380"
y="260.21939"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="107.99999"
id="tspan8382"
sodipodi:role="line">2</tspan></text>
</g>
<g
class="fragment"
id="g4223">
<rect
y="339.50504"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4841"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text5052"
y="386.64798"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="386.64798"
x="107.99999"
id="tspan5054"
sodipodi:role="line">1</tspan></text>
</g>
<g
transform="matrix(0.37283942,0,0,0.37283942,266.78663,137.71923)"
id="g8384"
class="fragment">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect8386"
width="96.428566"
height="64.285713"
x="61.250008"
y="212.50505" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="260.21939"
id="text8388"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8390"
x="107.99999"
y="260.21939">1</tspan></text>
</g>
<text
class="fragment"
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="91.792862"
y="436.34125"
id="text8275"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8277"
x="91.792862"
y="436.34125">✔</tspan></text>
</g>
<g
id="g8432">
<g
transform="translate(258.42869,-16.764772)"
id="g4228"
class="fragment">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471-7"
width="96.428566"
height="64.285713"
x="206.60716"
y="164.50507" />
<text
sodipodi:linespacing="125%"
id="text5060"
y="209.5051"
x="252.28571"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="209.5051"
x="252.28571"
id="tspan5062"
sodipodi:role="line">3</tspan></text>
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 464.64989,183.22184 367.86417,344.65041"
id="path8596"
inkscape:connector-curvature="0"
class="fragment"
sodipodi:nodetypes="cc" />
<g
transform="translate(162.57156,47.292695)"
id="g4233"
class="fragment">
<rect
y="164.50507"
x="302.46429"
height="64.285713"
width="96.428566"
id="rect4843"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="348.71426"
y="209.5051"
id="text5064"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5066"
x="348.71426"
y="209.5051">2</tspan></text>
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 465.00703,243.57898 368.57846,233.22184"
id="path8598"
inkscape:connector-curvature="0"
class="fragment"
sodipodi:nodetypes="cc" />
<g
transform="translate(67.428701,111.35016)"
id="g4238"
class="fragment">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4845"
width="96.428566"
height="64.285713"
x="397.60715"
y="164.50507" />
<text
sodipodi:linespacing="125%"
id="text5068"
y="209.5051"
x="446.57141"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="209.5051"
x="446.57141"
id="tspan5070"
sodipodi:role="line">1</tspan></text>
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 464.29274,310.00755 368.57846,233.93612"
id="path8600"
inkscape:connector-curvature="0"
class="fragment"
sodipodi:nodetypes="cc" />
<g
transform="translate(184.57145,0)"
id="g8336"
class="fragment">
<rect
y="339.91269"
x="280.46442"
height="64.285713"
width="96.428566"
id="rect4847"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="328.00009"
y="384.91272"
id="text5072"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5074"
x="328.00009"
y="384.91272">3</tspan></text>
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 464.29274,371.79327 367.86417,344.65041"
id="path8602"
inkscape:connector-curvature="0"
class="fragment"
sodipodi:nodetypes="cc" />
<text
class="fragment"
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="497.79276"
y="435.36218"
id="text8279"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8281"
x="497.79276"
y="435.36218">✔</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1,608 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="191.83719mm"
height="80.718437mm"
viewBox="0 0 679.73807 286.01022"
id="svg4281"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="2018-02-12-Join-2PassHash.svg">
<defs
id="defs4283">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker4535"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path4282"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.8) rotate(180) translate(12.5,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker4633"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
id="path4635"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker4605"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
id="path4607"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lstart"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path4271"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="203.30987"
inkscape:cy="173.41795"
inkscape:document-units="px"
inkscape:current-layer="g8432"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1388"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata4286">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-60.364181,-146.85447)">
<g
id="g8632"
transform="translate(265.60915,0)">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.61618328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect8634"
width="188.7899"
height="108.78987"
x="177.75493"
y="179.89833" />
<rect
y="291.3269"
x="177.75493"
height="108.78987"
width="188.7899"
id="rect8636"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.61618328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:20.00000191px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="279.29282"
y="282.86465"
id="text8638"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8640"
x="279.29282"
y="282.86465">h(A) = 0</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8642"
y="394.29324"
x="279.29282"
style="font-style:normal;font-weight:normal;font-size:20.00000191px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="394.29324"
x="279.29282"
id="tspan8644"
sodipodi:role="line">h(A) = 1</tspan></text>
</g>
<g
id="g8400">
<rect
y="179.89833"
x="177.75493"
height="108.78987"
width="188.7899"
id="rect8348"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.61618328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.61618328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect8350"
width="188.7899"
height="108.78987"
x="177.75493"
y="291.3269" />
<text
sodipodi:linespacing="125%"
id="text8352"
y="282.86465"
x="279.29282"
style="font-style:normal;font-weight:normal;font-size:20.00000191px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="282.86465"
x="279.29282"
id="tspan8354"
sodipodi:role="line">h(A) = 0</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:20.00000191px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="279.29282"
y="394.29324"
id="text8356"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8358"
x="279.29282"
y="394.29324">h(A) = 1</tspan></text>
</g>
<g
id="g8474">
<g
class="fragment"
id="g4208">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471"
width="96.428566"
height="64.285713"
x="61.250008"
y="148.79077" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="194.5051"
id="text5040"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5042"
x="107.99999"
y="194.5051">1</tspan></text>
</g>
<g
transform="matrix(0.37283942,0,0,0.37283942,188.92948,137.71923)"
id="g8368"
class="fragment">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect8370"
width="96.428566"
height="64.285713"
x="61.250008"
y="212.50505" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="260.21939"
id="text8372"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8374"
x="107.99999"
y="260.21939">1</tspan></text>
</g>
<g
class="fragment"
id="g4213">
<rect
y="212.50505"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4837"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text5044"
y="260.21939"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="107.99999"
id="tspan5046"
sodipodi:role="line">3</tspan></text>
</g>
<g
id="g8392"
transform="matrix(0.37283942,0,0,0.37283942,240.7152,257.3621)"
class="fragment">
<rect
y="212.50505"
x="-77.6455"
height="64.285713"
width="96.428566"
id="rect8394"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text8396"
y="260.21939"
x="-30.895515"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="-30.895515"
id="tspan8398"
sodipodi:role="line">3</tspan></text>
</g>
<g
class="fragment"
id="g8341">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4839"
width="96.428566"
height="64.285713"
x="61.250008"
y="276.21933" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="323.07654"
id="text5048"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5050"
x="107.99999"
y="323.07654">2</tspan></text>
</g>
<g
id="g8376"
transform="matrix(0.37283942,0,0,0.37283942,228.2152,137.71923)"
class="fragment">
<rect
y="212.50505"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect8378"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text8380"
y="260.21939"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="107.99999"
id="tspan8382"
sodipodi:role="line">2</tspan></text>
</g>
<g
class="fragment"
id="g4223">
<rect
y="339.50504"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4841"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text5052"
y="386.64798"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="386.64798"
x="107.99999"
id="tspan5054"
sodipodi:role="line">1</tspan></text>
</g>
<g
transform="matrix(0.37283942,0,0,0.37283942,266.78663,137.71923)"
id="g8384"
class="fragment">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect8386"
width="96.428566"
height="64.285713"
x="61.250008"
y="212.50505" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="260.21939"
id="text8388"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8390"
x="107.99999"
y="260.21939">1</tspan></text>
</g>
<text
class="fragment"
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="91.792862"
y="436.34125"
id="text8275"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8277"
x="91.792862"
y="436.34125">✔</tspan></text>
</g>
<g
id="g8432"
transform="translate(-117.85714,0)">
<g
transform="translate(554.03784,-16.764772)"
id="g4228"
class="fragment">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471-7"
width="96.428566"
height="64.285713"
x="206.60716"
y="164.50507" />
<text
sodipodi:linespacing="125%"
id="text5060"
y="209.5051"
x="252.28571"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="209.5051"
x="252.28571"
id="tspan5062"
sodipodi:role="line">3</tspan></text>
</g>
<g
class="fragment"
id="g4249"
transform="matrix(0.37283942,0,0,0.37283942,552.58143,258.81777)">
<rect
y="212.50505"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4251"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text4253"
y="260.21939"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="107.99999"
id="tspan4255"
sodipodi:role="line">3</tspan></text>
</g>
<g
transform="translate(458.18071,47.292695)"
id="g4233"
class="fragment">
<rect
y="164.50507"
x="302.46429"
height="64.285713"
width="96.428566"
id="rect4843"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="348.71426"
y="209.5051"
id="text5064"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5066"
x="348.71426"
y="209.5051">2</tspan></text>
</g>
<g
transform="matrix(0.37283942,0,0,0.37283942,552.58143,137.59946)"
id="g8384-4"
class="fragment">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect8386-2"
width="96.428566"
height="64.285713"
x="61.250008"
y="212.50505" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="260.21939"
id="text8388-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8390-1"
x="107.99999"
y="260.21939">2</tspan></text>
</g>
<g
transform="translate(363.03785,111.35016)"
id="g4238"
class="fragment">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4845"
width="96.428566"
height="64.285713"
x="397.60715"
y="164.50507" />
<text
sodipodi:linespacing="125%"
id="text5068"
y="209.5051"
x="446.57141"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="209.5051"
x="446.57141"
id="tspan5070"
sodipodi:role="line">1</tspan></text>
</g>
<g
class="fragment"
id="g4229"
transform="matrix(0.37283942,0,0,0.37283942,590.96723,137.59946)">
<rect
y="212.50505"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4231"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text4233"
y="260.21939"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="107.99999"
id="tspan4235"
sodipodi:role="line">1</tspan></text>
</g>
<g
transform="translate(480.1806,0)"
id="g8336"
class="fragment">
<rect
y="339.91269"
x="280.46442"
height="64.285713"
width="96.428566"
id="rect4847"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="328.00009"
y="384.91272"
id="text5072"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5074"
x="328.00009"
y="384.91272">3</tspan></text>
</g>
<g
transform="matrix(0.37283942,0,0,0.37283942,590.96723,258.81777)"
id="g4241"
class="fragment">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4243"
width="96.428566"
height="64.285713"
x="61.250008"
y="212.50505" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="260.21939"
id="text4245"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4247"
x="107.99999"
y="260.21939">3</tspan></text>
</g>
<text
class="fragment"
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="793.40186"
y="435.36218"
id="text8279"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8281"
x="793.40186"
y="435.36218">✔</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#marker4535)"
d="m 486.07848,230.7218 72.14286,0"
id="path4265"
inkscape:connector-curvature="0"
class="fragment" />
<path
inkscape:connector-curvature="0"
id="path4603"
d="m 486.07848,350.00751 72.14286,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker4605);marker-end:url(#marker4633)"
class="fragment" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,274 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="107.84523mm"
height="153.58023mm"
viewBox="0 0 107.84523 153.58023"
version="1.1"
id="svg10469"
inkscape:version="0.91 r13725"
sodipodi:docname="2018-02-12-Join-BNLJ.svg">
<defs
id="defs10463" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-108.00703"
inkscape:cy="177.30339"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1388"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata10466">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-24.696428,-35.190475)">
<g
id="g10604">
<g
id="g10525">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471"
width="27.214285"
height="18.142857"
x="24.946428"
y="35.440475" />
<rect
y="53.583332"
x="24.946428"
height="18.142857"
width="27.214285"
id="rect10473"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g10529">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10475"
width="27.214285"
height="18.142857"
x="24.946428"
y="74.372025" />
<rect
y="92.514885"
x="24.946428"
height="18.142857"
width="27.214285"
id="rect10477"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g10533">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10479"
width="27.214285"
height="18.142857"
x="24.946428"
y="113.30355" />
<rect
y="131.44637"
x="24.946428"
height="18.142857"
width="27.214285"
id="rect10481"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g10537">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10483"
width="27.214285"
height="18.142857"
x="24.946428"
y="152.235" />
<rect
y="170.37785"
x="24.946428"
height="18.142857"
width="27.214285"
id="rect10485"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g10558">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471-7"
width="27.214285"
height="18.142857"
x="105.07738"
y="35.440475" />
<rect
y="53.583328"
x="105.07738"
height="18.142857"
width="27.214285"
id="rect10473-9"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g10554">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10475-3"
width="27.214285"
height="18.142857"
x="105.07738"
y="74.372032" />
<rect
y="92.514885"
x="105.07738"
height="18.142857"
width="27.214285"
id="rect10477-8"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g10550">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10479-0"
width="27.214285"
height="18.142857"
x="105.07738"
y="113.30355" />
<rect
y="131.44637"
x="105.07738"
height="18.142857"
width="27.214285"
id="rect10481-2"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g10546">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10483-4"
width="27.214285"
height="18.142857"
x="105.07738"
y="152.235" />
<rect
y="170.37785"
x="105.07738"
height="18.142857"
width="27.214285"
id="rect10485-8"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
id="g10615"
style="stroke:#000000"
class="fragment">
<path
inkscape:connector-curvature="0"
id="path10560"
d="m 52.160712,53.583331 52.916668,0"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path10562"
d="M 105.07738,92.514886 52.160713,53.583332 105.07738,131.44637"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path10564"
d="M 52.160712,53.583331 105.07738,170.37785"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g10619"
style="stroke:#000000"
class="fragment">
<path
inkscape:connector-curvature="0"
id="path10566"
d="m 105.07738,53.583331 -52.916668,38.931554 52.916668,0"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path10568"
d="M 105.07738,131.44637 52.160712,92.514877 105.07738,170.37785"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g10629"
style="stroke:#000000"
class="fragment">
<path
inkscape:connector-curvature="0"
id="path10570"
d="M 52.160712,131.44636 105.07738,53.583329"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<g
style="stroke:#000000"
id="g10623">
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 105.07738,92.514885 -52.916668,38.931525 52.916668,0"
id="path10572"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 52.160712,131.44636 52.916668,38.93149"
id="path10574"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g10633"
style="stroke:#000000"
class="fragment">
<path
inkscape:connector-curvature="0"
id="path10576"
d="M 105.07738,53.583331 52.160712,170.37785 105.07738,92.514885"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path10578"
d="m 105.07738,131.44637 -52.916668,38.93148 52.916668,0"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.7 KiB

View file

@ -0,0 +1,368 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="148.66866mm"
height="101.85mm"
viewBox="0 0 526.7787 360.88582"
id="svg4281"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="2018-02-12-Join-Grid.svg">
<defs
id="defs4283" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="-117.32522"
inkscape:cy="65.003142"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1388"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata4286">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-60.364181,-64.333526)">
<g
id="g4882"
class="fragment">
<path
inkscape:connector-curvature="0"
id="path4849"
d="m 229.28571,425.21935 0,-320.71429"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 325.71428,425.21935 0,-320.71429"
id="path4851"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4853"
d="m 420.71428,425.21935 0,-320.71429"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 515.71428,425.21935 0,-320.71429"
id="path4855"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4857"
d="m 128.57143,183.79078 458.57143,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 128.57143,246.64792 458.57143,0"
id="path4859"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4861"
d="m 128.57143,312.36221 458.57143,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 128.57143,374.50507 458.57143,0"
id="path4863"
inkscape:connector-curvature="0" />
</g>
<g
id="g5084">
<rect
y="148.79077"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect10471"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4837"
width="96.428566"
height="64.285713"
x="61.250008"
y="212.50505" />
<rect
y="276.21933"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4839"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4841"
width="96.428566"
height="64.285713"
x="61.250008"
y="339.50504" />
<g
id="g4188"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="194.5051"
id="text5040"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5042"
x="107.99999"
y="194.5051">1</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5044"
y="260.21939"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="107.99999"
id="tspan5046"
sodipodi:role="line">3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="323.07654"
id="text5048"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5050"
x="107.99999"
y="323.07654">2</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5052"
y="386.64798"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="386.64798"
x="107.99999"
id="tspan5054"
sodipodi:role="line">1</tspan></text>
</g>
</g>
<g
id="g5102">
<rect
y="65.219353"
x="182.32144"
height="64.285713"
width="96.428566"
id="rect10471-7"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4843"
width="96.428566"
height="64.285713"
x="278.17859"
y="65.219353" />
<rect
y="65.219353"
x="373.32144"
height="64.285713"
width="96.428566"
id="rect4845"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4847"
width="96.428566"
height="64.285713"
x="469.03574"
y="65.219353" />
<g
id="g4198"
class="fragment">
<text
sodipodi:linespacing="125%"
id="text5060"
y="110.21938"
x="227.99998"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="110.21938"
x="227.99998"
id="tspan5062"
sodipodi:role="line">3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="324.42856"
y="110.21938"
id="text5064"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5066"
x="324.42856"
y="110.21938">2</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5068"
y="110.21938"
x="422.28571"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="110.21938"
x="422.28571"
id="tspan5070"
sodipodi:role="line">3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="516.57141"
y="110.21938"
id="text5072"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5074"
x="516.57141"
y="110.21938">1</tspan></text>
</g>
</g>
<g
id="g4875"
class="fragment">
<rect
y="280.36221"
x="276.39288"
height="64.285713"
width="96.428566"
id="rect4865"
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4867"
width="96.428566"
height="64.285713"
x="373.53574"
y="216.07649" />
<rect
y="340.50507"
x="471.25003"
height="64.285713"
width="96.428566"
id="rect4869"
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4871"
width="96.428566"
height="64.285713"
x="471.25003"
y="151.21935" />
<rect
y="215.50505"
x="180.53574"
height="64.285713"
width="96.428566"
id="rect4873"
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="228.71426"
y="262.21939"
id="text5076"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5078"
x="228.71426"
y="262.21939">3</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5135"
y="328.07654"
x="324.42856"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="328.07654"
x="324.42856"
id="tspan5137"
sodipodi:role="line">2</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5139"
y="262.21939"
x="420.85712"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="262.21939"
x="420.85712"
id="tspan5141"
sodipodi:role="line">3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="519.85712"
y="197.36224"
id="text5143"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5145"
x="519.85712"
y="197.36224">1</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5147"
y="387.36224"
x="519.85712"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="387.36224"
x="519.85712"
id="tspan5149"
sodipodi:role="line">1</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="513.22131"
y="112.36221"
id="text4184"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4186"
x="513.22131"
y="112.36221"></tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="107.84523mm"
height="145.11356mm"
viewBox="0 0 107.84523 145.11356"
version="1.1"
id="svg10469"
inkscape:version="0.91 r13725"
sodipodi:docname="2018-02-12-Join-NLJ.svg">
<defs
id="defs10463" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-113.84083"
inkscape:cy="81.737399"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1388"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata10466">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-24.696428,-35.190484)">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471"
width="27.214285"
height="18.142857"
x="24.946428"
y="35.440475" />
<rect
y="53.583332"
x="24.946428"
height="18.142857"
width="27.214285"
id="rect10473"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10475"
width="27.214285"
height="18.142857"
x="24.946428"
y="71.549805" />
<rect
y="89.692665"
x="24.946428"
height="18.142857"
width="27.214285"
id="rect10477"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10479"
width="27.214285"
height="18.142857"
x="24.946428"
y="107.6591" />
<rect
y="125.80192"
x="24.946428"
height="18.142857"
width="27.214285"
id="rect10481"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10483"
width="27.214285"
height="18.142857"
x="24.946428"
y="143.76833" />
<rect
y="161.91118"
x="24.946428"
height="18.142857"
width="27.214285"
id="rect10485"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g4221"
class="fragment"
transform="matrix(1.0317471,0,0,0.99998823,-1.6524342,0.00126849)">
<path
inkscape:connector-curvature="0"
id="path4213"
d="m 105.41198,44.555142 -53.339997,0 52.493337,18.062224"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4215"
d="M 104.56532,79.268477 52.354206,45.119586 105.12976,99.024035"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4217"
d="M 104.28309,116.52181 52.354206,44.837364 104.56532,135.71293"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4219"
d="M 104.84754,153.49293 52.354206,44.837364 104.56532,170.99071"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471-7"
width="27.214285"
height="18.142857"
x="105.07738"
y="35.440475" />
<rect
y="53.583328"
x="105.07738"
height="18.142857"
width="27.214285"
id="rect10473-9"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10475-3"
width="27.214285"
height="18.142857"
x="105.07738"
y="71.549812" />
<rect
y="89.692665"
x="105.07738"
height="18.142857"
width="27.214285"
id="rect10477-8"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10479-0"
width="27.214285"
height="18.142857"
x="105.07738"
y="107.6591" />
<rect
y="125.80192"
x="105.07738"
height="18.142857"
width="27.214285"
id="rect10481-2"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10483-4"
width="27.214285"
height="18.142857"
x="105.07738"
y="143.76833" />
<rect
y="161.91118"
x="105.07738"
height="18.142857"
width="27.214285"
id="rect10485-8"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g4235"
class="fragment"
transform="matrix(1.0107094,0,0,1.0068195,-0.55954858,-0.30465241)">
<path
inkscape:connector-curvature="0"
id="path4227"
d="m 104.56531,44.837371 -52.211108,18.908888 51.928888,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4229"
d="M 104.56531,78.421814 52.636424,63.746259 104.56531,97.612927"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4231"
d="M 104.84753,115.39293 52.636424,64.028481 104.84754,133.45515"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4233"
d="M 104.56531,150.38848 52.354202,63.746259 104.84754,168.73293"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g4263"
class="fragment">
<text
class=""
sodipodi:linespacing="125%"
id="text4255"
y="149.25945"
x="72.674202"
style="font-style:normal;font-weight:normal;font-size:11.28888893px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="149.25945"
x="72.674202"
id="tspan4257"
sodipodi:role="line">...</tspan></text>
<text
class=""
sodipodi:linespacing="125%"
id="text4251"
y="136.84181"
x="72.674202"
style="font-style:normal;font-weight:normal;font-size:11.28888893px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="136.84181"
x="72.674202"
id="tspan4253"
sodipodi:role="line">...</tspan></text>
<text
class=""
sodipodi:linespacing="125%"
id="text4259"
y="161.67708"
x="72.674202"
style="font-style:normal;font-weight:normal;font-size:11.28888893px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="161.67708"
x="72.674202"
id="tspan4261"
sodipodi:role="line">...</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,353 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="148.66866mm"
height="101.85mm"
viewBox="0 0 526.7787 360.88582"
id="svg4281"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="2018-02-12-Join-OrderGrid.svg">
<defs
id="defs4283" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="-117.32522"
inkscape:cy="65.358271"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1388"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata4286">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-60.364181,-64.333526)">
<g
id="g4218"
transform="translate(194.85714,193.57143)">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52339476px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 229.28571,230.21936 0,-87.85714"
id="path5172"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path5174"
d="m 325.71428,232.36222 0,-90.00001"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5297392px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.68472427px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 173.57143,183.79078 215,0"
id="path5180"
inkscape:connector-curvature="0" />
<rect
y="149.07648"
x="276.39288"
height="64.285713"
width="96.428566"
id="rect4865"
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="149.07648"
x="180.53574"
height="64.285713"
width="96.428566"
id="rect4873"
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="228.71426"
y="195.79941"
id="text5076"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5078"
x="228.71426"
y="195.79941">3</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5135"
y="195.77988"
x="324.42856"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="195.77988"
x="324.42856"
id="tspan5137"
sodipodi:role="line">3</tspan></text>
</g>
<g
id="g4229"
transform="translate(-95.714286,64.285714)">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.55035925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 420.71428,294.50507 0,-97.14285"
id="path5176"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path5182"
d="m 351.42857,246.64792 137.85715,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.54829103px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4867"
width="96.428566"
height="64.285713"
x="373.53574"
y="214.07649" />
<text
sodipodi:linespacing="125%"
id="text5139"
y="260.21939"
x="420.85712"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="420.85712"
id="tspan5141"
sodipodi:role="line">2</tspan></text>
</g>
<g
id="g4207"
transform="translate(-290,-128.57143)">
<path
inkscape:connector-curvature="0"
id="path5178"
d="m 515.71428,425.21936 0,-166.42858"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.72036862px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.55394369px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 446.42857,312.36221 140.71429,0"
id="path5184"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path5186"
d="m 445,374.50507 142.14286,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.55674845px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="342.50507"
x="471.25003"
height="64.285713"
width="96.428566"
id="rect4869"
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800080;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4871"
width="96.428566"
height="64.285713"
x="471.25003"
y="278.21936" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="519.85712"
y="326.36224"
id="text5143"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5145"
x="519.85712"
y="326.36224">1</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5147"
y="391.36224"
x="519.85712"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="391.36224"
x="519.85712"
id="tspan5149"
sodipodi:role="line">1</tspan></text>
</g>
<g
id="g5084">
<rect
y="148.79077"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect10471"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4837"
width="96.428566"
height="64.285713"
x="61.250008"
y="212.50505" />
<rect
y="276.21933"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4839"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4841"
width="96.428566"
height="64.285713"
x="61.250008"
y="339.50504" />
<text
sodipodi:linespacing="125%"
id="text5040"
y="194.5051"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="194.5051"
x="107.99999"
id="tspan5042"
sodipodi:role="line">1</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="260.21939"
id="text5044"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5046"
x="107.99999"
y="260.21939">1</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5048"
y="323.07654"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="323.07654"
x="107.99999"
id="tspan5050"
sodipodi:role="line">2</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="386.64798"
id="text5052"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5054"
x="107.99999"
y="386.64798">3</tspan></text>
</g>
<g
id="g5102">
<rect
y="65.219353"
x="182.32144"
height="64.285713"
width="96.428566"
id="rect10471-7"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4843"
width="96.428566"
height="64.285713"
x="278.17859"
y="65.219353" />
<rect
y="65.219353"
x="373.32144"
height="64.285713"
width="96.428566"
id="rect4845"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4847"
width="96.428566"
height="64.285713"
x="469.03574"
y="65.219353" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="227.99998"
y="110.21938"
id="text5060"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5062"
x="227.99998"
y="110.21938">1</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5064"
y="110.21938"
x="324.42856"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="110.21938"
x="324.42856"
id="tspan5066"
sodipodi:role="line">2</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="422.28571"
y="110.21938"
id="text5068"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5070"
x="422.28571"
y="110.21938">3</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5072"
y="110.21938"
x="516.57141"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="110.21938"
x="516.57141"
id="tspan5074"
sodipodi:role="line">3</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,303 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="89.581459mm"
height="80.718445mm"
viewBox="0 0 317.41462 286.01024"
id="svg4281"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="2018-02-12-Join-SortMerge.svg">
<defs
id="defs4283" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="-118.03951"
inkscape:cy="101.21991"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1388"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata4286">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-60.364181,-146.85447)">
<g
id="g4248"
class="fragment">
<g
id="g4208">
<rect
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471"
width="96.428566"
height="64.285713"
x="61.250008"
y="148.79077" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="107.99999"
y="194.5051"
id="text5040"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5042"
x="107.99999"
y="194.5051">1</tspan></text>
</g>
<g
transform="translate(73.857238,-16.764772)"
id="g4228">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10471-7"
width="96.428566"
height="64.285713"
x="206.60716"
y="164.50507" />
<text
sodipodi:linespacing="125%"
id="text5060"
y="209.5051"
x="252.28571"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="209.5051"
x="252.28571"
id="tspan5062"
sodipodi:role="line">1</tspan></text>
</g>
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 158.22132,179.50507 120.71429,0"
id="path4258"
inkscape:connector-curvature="0"
class="fragment" />
<g
id="g4260"
class="fragment">
<g
id="g4213">
<rect
y="212.50505"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4837"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text5044"
y="260.21939"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="260.21939"
x="107.99999"
id="tspan5046"
sodipodi:role="line">1</tspan></text>
</g>
<g
transform="translate(-21.999894,47.292695)"
id="g4233">
<rect
y="164.50507"
x="302.46429"
height="64.285713"
width="96.428566"
id="rect4843"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="348.71426"
y="209.5051"
id="text5064"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5066"
x="348.71426"
y="209.5051">2</tspan></text>
</g>
</g>
<path
class="fragment"
inkscape:connector-curvature="0"
id="path4288"
d="m 158.22132,245.21936 120.71429,-65"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<g
id="g4218"
class="fragment">
<rect
y="276.21933"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4839"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text5048"
y="323.07654"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="323.07654"
x="107.99999"
id="tspan5050"
sodipodi:role="line">2</tspan></text>
</g>
<path
sodipodi:nodetypes="cc"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 158.22132,311.64793 120.71429,-65"
id="path4290"
inkscape:connector-curvature="0"
class="fragment" />
<g
id="g4292"
class="fragment">
<g
id="g4223">
<rect
y="339.50504"
x="61.250008"
height="64.285713"
width="96.428566"
id="rect4841"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text5052"
y="386.64798"
x="107.99999"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="386.64798"
x="107.99999"
id="tspan5054"
sodipodi:role="line">3</tspan></text>
</g>
<g
transform="translate(-117.14275,111.35016)"
id="g4238">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4845"
width="96.428566"
height="64.285713"
x="397.60715"
y="164.50507" />
<text
sodipodi:linespacing="125%"
id="text5068"
y="209.5051"
x="446.57141"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="209.5051"
x="446.57141"
id="tspan5070"
sodipodi:role="line">3</tspan></text>
</g>
</g>
<path
class="fragment"
inkscape:connector-curvature="0"
id="path4302"
d="m 158.22132,379.50507 120.71429,-65"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<g
id="g4243"
transform="translate(-212.85704,175.40763)"
class="fragment">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4847"
width="96.428566"
height="64.285713"
x="493.32144"
y="164.50507" />
<text
sodipodi:linespacing="125%"
id="text5072"
y="209.5051"
x="540.85712"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="209.5051"
x="540.85712"
id="tspan5074"
sodipodi:role="line">3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="304.6499"
y="260.93362"
id="text8275"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8277"
x="304.6499"
y="260.93362">✔</tspan></text>
</g>
<path
class="fragment"
inkscape:connector-curvature="0"
id="path4304"
d="m 158.22132,379.50507 120.71429,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text8279"
y="435.36218"
x="313.22131"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
class="fragment"><tspan
y="435.36218"
x="313.22131"
id="tspan8281"
sodipodi:role="line">✔</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

View file

@ -0,0 +1,277 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="195.6194mm"
height="147.07428mm"
viewBox="0 0 195.6194 147.07428"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="2018-01-31-parts_of_sql.svg">
<defs
id="defs2">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker1545"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1543"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker1217"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1215"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1175"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1173"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path848"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="154.41551"
inkscape:cy="77.010708"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-7.1997539,-2.9412171)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="9.0714293"
y="33.92857"
id="text12"><tspan
sodipodi:role="line"
id="tspan10"
x="9.0714293"
y="33.92857"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">SELECT [DISTINCT] <tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000"
id="tspan26">target-list</tspan></tspan><tspan
sodipodi:role="line"
x="9.0714293"
y="47.219749"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
id="tspan14" /><tspan
sodipodi:role="line"
x="9.0714293"
y="60.448914"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
id="tspan16" /><tspan
sodipodi:role="line"
x="9.0714293"
y="73.678078"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
id="tspan18">FROM <tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000"
id="tspan28">relation-list</tspan></tspan><tspan
sodipodi:role="line"
x="9.0714293"
y="86.969261"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
id="tspan20" /><tspan
sodipodi:role="line"
x="9.0714293"
y="100.19843"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
id="tspan22" /><tspan
sodipodi:role="line"
x="9.0714293"
y="113.42759"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
id="tspan24">WHERE <tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000"
id="tspan30">condition</tspan></tspan></text>
<g
id="g1131"
class="fragment">
<text
id="text34"
y="86.845245"
x="11.339282"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#666666;stroke-width:0.26458332"
y="86.845245"
x="11.339282"
id="tspan32"
sodipodi:role="line">A list of relation names </tspan><tspan
id="tspan36"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#666666;stroke-width:0.26458332"
y="95.664688"
x="11.339282"
sodipodi:role="line">(possibly with a range-variable after each name)</tspan></text>
<path
inkscape:connector-curvature="0"
id="path38"
d="M 95.249999,84.577379 107.34524,76.261904"
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
</g>
<g
id="g1253"
transform="translate(23.434524,-37.041667)"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="-7.5595274"
y="89.869057"
id="text1163"><tspan
sodipodi:role="line"
x="-7.5595274"
y="89.869057"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#666666;stroke-width:0.26458332"
id="tspan1161">A list of attributes of relations in <tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000"
id="tspan1171">relation-list</tspan></tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1217)"
d="M 95.249999,84.577379 107.34524,76.261904"
id="path1165"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(21.166667,-64.255953)"
id="g1524"
class="fragment">
<text
id="text1211"
y="195.70239"
x="-14.363099"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#666666;stroke-width:0.26458332"
y="195.70239"
x="-14.363099"
sodipodi:role="line"
id="tspan1255">Comparisons (=, &lt;&gt;, &lt;, &gt;, &lt;=, &gt;=) and other </tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#666666;stroke-width:0.26458332"
y="204.52184"
x="-14.363099"
sodipodi:role="line"
id="tspan1263">boolean predicates, combined using AND, OR, and NOT </tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#666666;stroke-width:0.26458332"
y="213.34128"
x="-14.363099"
sodipodi:role="line"
id="tspan1257">(a boolean formula)</tspan></text>
<path
inkscape:connector-curvature="0"
id="path1213"
d="m 86.858927,189.88154 -5.367258,-8.31547"
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1175)"
sodipodi:nodetypes="cc" />
</g>
<g
id="g2074"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="19.654758"
y="8.3017855"
id="text1532"><tspan
sodipodi:role="line"
x="19.654758"
y="8.3017855"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#666666;stroke-width:0.26458332"
id="tspan1590">(optional) keyword indicating that the answer </tspan><tspan
sodipodi:role="line"
x="19.654758"
y="17.121229"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#666666;stroke-width:0.26458332"
id="tspan1597">should not contain duplicates</tspan></text>
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1545)"
d="m 81.567261,18.733908 4.838099,7.55953"
id="path1534"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,209 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="176.25287mm"
height="50.51762mm"
viewBox="0 0 176.25287 50.51762"
version="1.1"
id="svg2182"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="2018-01-31-record-fixed.svg">
<defs
id="defs2176">
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker2906"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path2904"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path848"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="144.10146"
inkscape:cy="-2.546985"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata2179">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-13.327202,-43.623451)">
<rect
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2184"
width="48.380955"
height="24.190477"
x="14.02756"
y="43.755951" />
<rect
y="43.755951"
x="93.149078"
height="24.245546"
width="30.293167"
id="rect2749"
style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.20993012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-width:0.20993012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2751"
width="30.293167"
height="24.245546"
x="62.645981"
y="43.755951" />
<rect
style="fill:#aa8800;fill-opacity:1;stroke:#000000;stroke-width:0.30858862;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2753"
width="65.724274"
height="24.146889"
x="123.7015"
y="43.805279" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="34.695065"
y="59.966011"
id="text2757"><tspan
sodipodi:role="line"
id="tspan2755"
x="34.695065"
y="59.966011"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332">A</tspan></text>
<text
id="text2761"
y="59.993546"
x="73.864006"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332"
y="59.993546"
x="73.864006"
sodipodi:role="line"
id="tspan2763">B</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="104.23158"
y="59.988033"
id="text2771"><tspan
id="tspan2769"
sodipodi:role="line"
x="104.23158"
y="59.988033"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332">C</tspan></text>
<text
id="text2775"
y="59.993546"
x="151.99681"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332"
y="59.993546"
x="151.99681"
sodipodi:role="line"
id="tspan2773">D</tspan></text>
<g
id="g3106"
class="fragment">
<text
id="text2862"
y="92.212502"
x="16.139584"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="92.212502"
x="16.139584"
id="tspan2860"
sodipodi:role="line">Base Address (X)</tspan></text>
<g
id="g3089">
<path
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2906)"
d="M 16.66875,85.333334 C 14.02756,67.946425 14.02756,67.946425 14.02756,67.946425"
id="path2880"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g3100"
class="fragment">
<text
id="text2878"
y="92.477089"
x="94.720833"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="92.477089"
x="94.720833"
id="tspan2876"
sodipodi:role="line">Address of C (X+|A|+|B|) </tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path2882"
d="M 98.425003,85.06875 93.149078,68.001496"
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,372 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="242.32359mm"
height="72.466888mm"
viewBox="0 0 242.32359 72.466889"
version="1.1"
id="svg2182"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="2018-01-31-record-header.svg">
<defs
id="defs2176">
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker6037"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path6035"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker5617"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
inkscape:connector-curvature="0"
id="path5615"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker5161"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path5159"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4579"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
inkscape:connector-curvature="0"
id="path4577"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker4119"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path4117"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker3266"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3264"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.8101934"
inkscape:cx="188.28422"
inkscape:cy="299.3423"
inkscape:document-units="mm"
inkscape:current-layer="g3349"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata2179">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(26.211064,-52.655236)">
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4119)"
d="m -17.921086,74.863698 c 0,0 16.1230464,-22.07617 35.139974,-22.07617 17.363281,0.826822 24.04778,22.168172 24.04778,22.168172"
id="path3363"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path4115"
d="m 1.5092526,74.863698 c 0,0 30.9397134,-22.07617 49.9566414,-22.07617 C 68.829175,53.61435 89.272007,74.9557 89.272007,74.9557"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4579)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5161)"
d="m 17.384257,74.863698 c 0,0 43.639719,-22.07617 62.656647,-22.07617 C 97.404185,53.61435 119.43454,74.9557 119.43454,74.9557"
id="path5157"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path5613"
d="m 32.7301,74.863698 c 0,0 58.985552,-22.07617 78.00248,-22.07617 C 128.09593,53.61435 150.1263,74.9557 150.1263,74.9557"
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5617)" />
<g
id="g3136"
transform="translate(27.239109,31.275902)">
<rect
y="43.755951"
x="14.02756"
height="24.190477"
width="48.380955"
id="rect2184"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text2757"
y="59.966011"
x="34.695065"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332"
y="59.966011"
x="34.695065"
id="tspan2755"
sodipodi:role="line">A</tspan></text>
</g>
<g
id="g3141"
transform="translate(27.001644,31.220833)">
<rect
y="43.755951"
x="62.645981"
height="24.245546"
width="30.293167"
id="rect2751"
style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-width:0.20993012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="73.864006"
y="59.993546"
id="text2761"><tspan
id="tspan2763"
sodipodi:role="line"
x="73.864006"
y="59.993546"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332">B</tspan></text>
</g>
<g
id="g3146"
transform="translate(26.791714,31.220833)">
<rect
style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.20993012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2749"
width="30.293167"
height="24.245546"
x="93.149078"
y="43.755951" />
<text
id="text2771"
y="59.988033"
x="104.23158"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332"
y="59.988033"
x="104.23158"
sodipodi:role="line"
id="tspan2769">C</tspan></text>
</g>
<g
id="g3151"
transform="translate(26.53246,31.270165)">
<rect
y="43.805279"
x="123.7015"
height="24.146889"
width="65.724274"
id="rect2753"
style="fill:#aa8800;fill-opacity:1;stroke:#000000;stroke-width:0.30858862;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="151.99681"
y="59.993546"
id="text2775"><tspan
id="tspan2773"
sodipodi:role="line"
x="151.99681"
y="59.993546"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332">D</tspan></text>
</g>
<g
id="g3159"
transform="translate(-79.561899,31.210289)">
<rect
style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.15663512;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3153"
width="16.849852"
height="24.266626"
x="70.279007"
y="43.745411" />
<text
id="text3157"
y="58.860798"
x="78.591034"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ececec;stroke-width:0.26458332"
y="58.860798"
x="78.591034"
sodipodi:role="line"
id="tspan3155">|A|</tspan></text>
</g>
<g
transform="translate(-62.712045,31.210289)"
id="g3341">
<rect
y="43.745411"
x="70.279007"
height="24.266626"
width="16.849852"
id="rect3335"
style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.15663512;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="78.44487"
y="58.860798"
id="text3339"><tspan
id="tspan3337"
sodipodi:role="line"
x="78.44487"
y="58.860798"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ececec;stroke-width:0.26458332">|B|</tspan></text>
</g>
<g
id="g3349"
transform="translate(-45.862191,31.210289)">
<rect
style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.15663512;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3343"
width="16.849852"
height="24.266626"
x="70.279007"
y="43.745411" />
<text
id="text3347"
y="58.860798"
x="78.974037"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ececec;stroke-width:0.26458332"
y="58.860798"
x="78.974037"
sodipodi:role="line"
id="tspan3345">|C|</tspan></text>
</g>
<g
transform="translate(-96.411753,31.210289)"
id="g3357">
<rect
y="43.745411"
x="70.279007"
height="24.266626"
width="16.849852"
id="rect3351"
style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.15663512;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="78.89135"
y="58.860798"
id="text3355"><tspan
id="tspan3353"
sodipodi:role="line"
x="78.89135"
y="58.860798"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ececec;stroke-width:0.26458332">|H|</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="11.844539"
y="123.06747"
id="text3361"><tspan
sodipodi:role="line"
id="tspan3359"
x="11.844539"
y="123.06747"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777805px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">Record header points to each field</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6037)"
d="M 21.766414,113.55901 7.5669619,99.222328"
id="path6027"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -0,0 +1,288 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="225.76538mm"
height="63.106003mm"
viewBox="0 0 225.76538 63.106003"
version="1.1"
id="svg2182"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="2018-01-31-record-separator.svg">
<defs
id="defs2176">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker3266"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3264"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker3244"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3242"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker2906"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path2904"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.64"
inkscape:cx="314.63591"
inkscape:cy="640.79928"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata2179">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(9.6528568,-74.844284)">
<g
id="g3136"
transform="translate(-23.547917,31.220833)">
<rect
y="43.755951"
x="14.02756"
height="24.190477"
width="48.380955"
id="rect2184"
style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text2757"
y="59.966011"
x="34.695065"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332"
y="59.966011"
x="34.695065"
id="tspan2755"
sodipodi:role="line">A</tspan></text>
</g>
<g
id="g3141"
transform="translate(-6.6980634,31.220834)">
<rect
y="43.755951"
x="62.645981"
height="24.245546"
width="30.293167"
id="rect2751"
style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-width:0.20993012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="73.864006"
y="59.993546"
id="text2761"><tspan
id="tspan2763"
sodipodi:role="line"
x="73.864006"
y="59.993546"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332">B</tspan></text>
</g>
<g
id="g3146"
transform="translate(9.9418601,31.220834)">
<rect
style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.20993012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2749"
width="30.293167"
height="24.245546"
x="93.149078"
y="43.755951" />
<text
id="text2771"
y="59.988033"
x="104.23158"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332"
y="59.988033"
x="104.23158"
sodipodi:role="line"
id="tspan2769">C</tspan></text>
</g>
<g
id="g3151"
transform="translate(26.53246,31.270165)">
<rect
y="43.805279"
x="123.7015"
height="24.146889"
width="65.724274"
id="rect2753"
style="fill:#aa8800;fill-opacity:1;stroke:#000000;stroke-width:0.30858862;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="151.99681"
y="59.993546"
id="text2775"><tspan
id="tspan2773"
sodipodi:role="line"
x="151.99681"
y="59.993546"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332">D</tspan></text>
</g>
<g
id="g3159"
transform="translate(-31.180943,31.21029)">
<rect
style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.15663512;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3153"
width="16.849852"
height="24.266626"
x="70.279007"
y="43.745411" />
<text
id="text3157"
y="59.337601"
x="73.798119"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332"
y="59.337601"
x="73.798119"
sodipodi:role="line"
id="tspan3155">','</tspan></text>
</g>
<g
transform="translate(15.962078,31.21029)"
id="g3167">
<rect
y="43.745411"
x="70.279007"
height="24.266626"
width="16.849852"
id="rect3161"
style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.15663512;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="73.798119"
y="59.337601"
id="text3165"><tspan
id="tspan3163"
sodipodi:role="line"
x="73.798119"
y="59.337601"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332">','</tspan></text>
</g>
<g
id="g3175"
transform="translate(63.105099,31.21029)">
<rect
style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.15663512;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3169"
width="16.849852"
height="24.266626"
x="70.279007"
y="43.745411" />
<text
id="text3173"
y="59.337601"
x="73.798119"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ececec;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.28888893px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ececec;stroke-width:0.26458332"
y="59.337601"
x="73.798119"
sodipodi:role="line"
id="tspan3171">','</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="-4.036077"
y="135.89563"
id="text3222"><tspan
sodipodi:role="line"
id="tspan3220"
x="-4.036077"
y="135.89563"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777805px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">Special Separator Characters Delimit Fields</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3244)"
d="M 53.014701,125.56034 47.640353,102.82271"
id="path3224"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2906)"
d="M 95.18267,125.97375 94.769258,103.64953"
id="path3226"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3266)"
d="m 139.00428,125.56034 2.89388,-21.91081"
id="path3228"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,627 @@
---
template: templates/cse4562_2021_slides.erb
title: Exam Review
date: May 6, 2021
dependencies:
- lib/slide_utils.rb
---
<section>
<section>
<dl>
<dt>Atomicity</dt>
<dd>My command gets executed fully, or not at all.</dd>
<dt>Consistency</dt>
<dd>The final state of the data is "sane".</dd>
<dt>Isolation</dt>
<dd>No concurrency glitches.</dd>
<dt>Durability</dt>
<dd>If things break, my data is still safe.</dd>
</dl>
</section>
<section>
<h3>Transactions</h3>
<p>A "batch" of operations that should execute together</p>
<dl>
<dt>START/BEGIN TRANSACTION</dt>
<dd>Start batching</dd>
<dt>COMMIT</dt>
<dd>Conclude the transaction and apply changes</dd>
<dt>ABORT/ROLLBACK</dt>
<dd>Undo all changes applied as part of the transaction</dd>
</dl>
</section>
<section>
<dl>
<div class="fragment" data-fragment-index="1">
<dt>Atomicity</dt>
<dd>A transaction is either applied fully (COMMITed) or not at all (ABORTed).</dd>
</div>
<div class="fragment" data-fragment-index="2">
<dt>Consistency</dt>
<dd>Constraints are enforced on the final state of the transaction (and the transaction is ABORTed if they fail).</dd>
</div>
<div class="fragment" data-fragment-index="3">
<div class="fragment highlight-blue" data-fragment-index="5">
<dt>Isolation</dt>
<dd>Two transactions running in parallel don't interfere with each other</dd>
</div>
</div>
<div class="fragment" data-fragment-index="4">
<dt>Durability</dt>
<dd>Once the database returns from a COMMIT successfully, the data is safe from marmots</dd>
</div>
</dl>
</section>
<section>
<h4>What does it mean for a transaction to be Isolated?</h4>
<p style="font-size: 80%" class="fragment">Alice and Bob submit transactions at the same time!</p>
<dl>
<div class="fragment">
<dt>Option 1</dt>
<dd class="fragment">Alice's transaction executes to completion.</dd>
<dd class="fragment">Bob's transaction executes to completion.</dd>
</div>
<div class="fragment">
<dt>Option 2</dt>
<dd>Bob's transaction executes to completion.</dd>
<dd>Alice's transaction executes to completion.</dd>
</div>
</dl>
</section>
<section>
<dl>
<div class="fragment">
<dt>Schedule</dt>
<dd>A sequence of read and writes from one or more transactions to objects</dd>
</div>
<div class="fragment">
<dt>Serial Schedule</dt>
<dd>A schedule with <u>no</u> interleaving</dd>
<dd class="fragment">... but with an arbitrary transaction order</dd>
</div>
<div class="fragment">
<dt>Serial<u>izable</u> Schedule</dt>
<dd>A schedule that produces the same output as a serial schedule</dd>
</div>
</dl>
</section>
<section>
<h3>Conflict Equivalence</h3>
<p>Two schedules are <u>conflict equivalent</u> if there is a sequence of pairwise "flips" (of reads, or operations on different objects) that gets you from one schedule to the other.</p>
</section>
<section>
<h3>Example 1</h3>
<table>
<tr><th>Time</th><th>T1</th><th>T2</th></tr>
<tr>
<td> | </td>
<td></td>
<td><code>W(B)</code></td>
</tr>
<tr>
<td> | </td>
<td><code>R(B)</code></td>
<td class="fragment" data-fragment-index="1">↑</td>
</tr>
<tr>
<td> | </td>
<td class="fragment" data-fragment-index="1">↓</td>
<td><code>W(A)</code></td>
</tr>
<tr>
<td> ↓ </td>
<td><code>W(A)</code></td>
<td></td>
</tr>
</table>
<p>&nbsp;</p>
</section>
<section>
<h3>Example 1</h3>
<table>
<tr><th>Time</th><th>T1</th><th>T2</th></tr>
<tr>
<td> | </td>
<td></td>
<td><code>W(B)</code></td>
</tr>
<tr>
<td> | </td>
<td></td>
<td><code>W(A)</code></td>
</tr>
<tr>
<td> | </td>
<td><code>R(B)</code></td>
<td></td>
</tr>
<tr>
<td> ↓ </td>
<td><code>W(A)</code></td>
<td></td>
</tr>
</table>
<p class="fragment">Conflict equivalent to a serial schedule!</p>
</section>
<section>
<h3>Example 2</h3>
<table>
<tr><th>Time</th><th>T1</th><th>T2</th></tr>
<tr>
<td> | </td>
<td></td>
<td><code>W(B)</code></td>
</tr>
<tr>
<td> | </td>
<td><code>R(B)</code></td>
<td></td>
</tr>
<tr>
<td> | </td>
<td><code>W(A)</code></td>
<td></td>
</tr>
<tr>
<td> ↓ </td>
<td></td>
<td><code>W(A)</code></td>
</tr>
</table>
<p class="fragment">Can't rewrite!</p>
</section>
<section>
<h3>Conflict Serializability</h3>
<p>A schedule is <u>conflict serializable</u> if it is conflict equivalent to a serial schedule.</p>
<p class="fragment">How do we determine if a schedule is conflict-serializable?</p>
</section>
<section>
<h3>Example 2</h3>
<table style="float: left;">
<tr><th>Time</th><th>T1</th><th>T2</th></tr>
<tr>
<td> | </td>
<td></td>
<td><code>W(B)</code></td>
</tr>
<tr>
<td> | </td>
<td><code>R(B)</code></td>
<td></td>
</tr>
<tr>
<td> | </td>
<td><code>W(A)</code></td>
<td></td>
</tr>
<tr>
<td> ↓ </td>
<td></td>
<td><code>W(A)</code></td>
</tr>
</table>
<p class="fragment" style="font-size: 80%">T2's write to B "happens before" T1's read</p>
<p class="fragment" style="font-size: 80%">T1's write to A "happens before" T2's write</p>
<img src="2021-05-04/DependencyCycle.svg" height="150px" class="fragment"/>
<p class="fragment" style="font-size: 80%">Cycle! No equivalent serial schedule!</p>
</section>
<section>
<p>An acyclic "Happens Before" or <u>Dependency Graph</u> is conflict serializable.</p>
</section>
<section>
<h3>2-Phase Locking</h3>
<p class="fragment">Create one lock for each object.</p>
<p class="fragment">Each transaction operates in two "phases".</p>
</section>
<section>
<dl>
<div class="fragment">
<dt>Acquire Phase</dt>
<dd>Before accessing an object, the transaction must acquire the object's lock.</dd>
<dd class="fragment">The transaction does not release locks.</dd>
</div>
<div class="fragment">
<dt>Release Phase</dt>
<dd>A transaction can release locks</dd>
<dd class="fragment">A transaction can never again access an object it doesn't have a lock for.</dd>
</div>
</dl>
<p class="fragment">In practice, the release phase happens all at once at the end</p>
</section>
<section>
<h3>All schedules created by 2PL are conflict-serializable</h3>
<h3>Not all conflict-serializable schedules can be created by 2PL</h3>
<p class="fragment">$2PL \subset CS$</p>
</section>
</section>
<section>
<section>
<h3>Locking is...</h3>
<dl>
<dt>... expensive</dt>
<dd>Costs are still incurred even if there are no problematic conflicts.</dd>
<dt>... restrictive</dt>
<dd>We don't know what the transaction will do, so we can't allow all schedules.</dd>
</dl>
</section>
<section>
<h3>Snapshot Isolation</h3>
<dl>
<div class="fragment">
<dt>Phase 1: Read</dt>
<dd>Transaction executes on a private copy of all accessed objects</dd>
</div>
<div class="fragment">
<dt>Phase 2: Validate</dt>
<dd>Check if applying the transaction would break isolation</dd>
</div>
<div class="fragment">
<dt>Phase 3: Write</dt>
<dd>Write the transaction's updates out to the main database</dd>
</div>
</dl>
</section>
<section>
<h3>Validation Phase</h3>
<p>Pick a serial order (e.g., the order in which transactions reach the validation phase)</p>
<p>Make sure the transaction's operations follow this order</p>
</section>
<section>
<dl>
<dt>T1 and T2 read the same object</dt>
<dd class="fragment">OK!</dd>
<dt>T1 reads an object written by T2 (read-write)</dt>
<dd class="fragment">Ok. (T1's validation phase started before T2's)</dd>
<dt>T2 reads an object written by T1 (write-read)</dt>
<dd class="fragment">Ok if T1-Write finishes before T2-Read starts.</dd>
<dt>T1 and T2 write the same object (write-write)</dt>
<dd class="fragment">Ok if T1-Write finishes before T2-Write starts.</dd>
</dl>
</section>
<section>
<h3>All schedules created by Snapshot Isolation are conflict-serializable</h3>
<p class="fragment">... but Snapshot Isolation only checks for equivalence to ONE serial schedule. There might be a different, conflict-equivalent serial schedule.</p>
<p class="fragment">$SI \subset CS$</p>
</section>
<section>
<h3>Timestamp Concurrency Control</h3>
<h4 style="font-size:80%; margin-bottom: 100px;">(Snapshot Isolation as seen "in practice")</h4>
<p>Each object $A$ gets a read timestamp ($RTS(A)$) and a write timestamp ($WTS(A)$)</p>
<p>Each transaction $\mathcal T$ gets a timestamp ($TS(\mathcal T)$).</p>
<p>(note that these can be <u>logical</u> timestamps like sequence numbers)</p>
<p class="fragment">(also note that real DBs don't use read timestamps... which creates problems)</p>
</section>
<section>
<h2>View Serializability</h2>
</section>
<section>
<h3>View Equivalence</h3>
<p>Two schedules are view-equivalent when you can transform one into the other by reordering any pair of operations that...</p>
<ul>
<li>operate on different objects</li>
<li>OR, are both reads</li>
<li>OR, are both writes to the same object, but ONLY IF the object is later overwritten by another write.</li>
</ul>
</section>
<section>
<h3>View Serializability</h3>
<p>A schedule is view serializable if it is view-equivalent to some serial schedule</p>
<p class="fragment">Timestamp concurrency control is guaranteed to produce view-serializable schedules.</p>
</section>
<section>
<h3>View Serializability</h3>
<p>On the happens-before graph, throw away <b>edges</b> created by "hidden" write-write conflicts.</p>
<p>If the resulting graph is acyclic, the schedule is view serializable</p>
</section>
<section>
<h3>By definition there are view serializable schedules that are not conflict serializable</h3>
<p>$CS \subset VS$</p>
</section>
<section>
<p>$2PL, SI \subset CS \subset VS \subset S$</p>
</section>
</section>
<section>
<section>
<h3>A long write...</h3>
<p>What if the DB fails during a write.</p>
<div class="fragment">
<p>IOs aren't atomic</p>
<p>Atomicity and Durability might be violated!</p>
</div>
</section>
<section>
<h3>Buffer memory is limited...</h3>
<p>What if we need to page out some pages modified by a live transaction?</p>
<div class="fragment">
<p>If the transaction aborts, the page state needs to be reverted.</p>
<p>Atomicity might be violated</p>
</div>
</section>
<section>
<h3>Write-Ahead Logging (WAL)</h3>
<ol>
<li>"Log" the transaction's actions</li>
<li>Wait for the log to be safely on-disk</li>
<li>Write the transaction's effects to disk</li>
</ol>
</section>
<section>
<p><b>Idea:</b> Periodically mark down the index of the earliest log entry still needed</p>
</section>
<section>
<h3>WAL Recovery</h3>
<ol>
<li>Scan backwards through the log to find the checkpoint.</li>
<li>Scan forward starting with the checkpointed 'first log entry' to find all transactions with a <code>COMMIT</code> entry.</li>
<li>Replay log entries starting with the checkpointed 'first log entry', ignoring non-<code>COMMIT</code>ed transactions.</li>
</ol>
</section>
<section>
<h2>Undo-Logging</h2>
</section>
<section>
<h3>Log</h3>
<table>
<tr>
<th>Timestamp</th>
<th>Transaction</th>
<th>Object</th>
<th>Value</th>
<th class="fragment" data-fragment-index="2">Prev</th>
</tr>
<tr><td>10</td><td>T1</td><td>Page 5</td><td>1010...</td><td class="fragment" data-fragment-index="2">00101...</td></tr>
<tr><td>11</td><td>T2</td><td>Page 3</td><td>1000...</td><td class="fragment" data-fragment-index="2">0111...</td></tr>
<tr><td>12</td><td>T1</td><td>Page 1</td><td>0011...</td><td class="fragment" data-fragment-index="2">0001...</td></tr>
<tr><td>13</td><td>T3</td><td>Page 5</td><td>1100...</td><td class="fragment" data-fragment-index="2">1010</td></tr>
</table>
<p class="fragment" data-fragment-index="1"><b>Idea: </b> Record the page's previous value.</p>
</section>
<section>
<h3>Recovering after a crash</h3>
<ol>
<li>Rebuild in-memory state (Analyze)</li>
<li>Rebuild buffer manager (Redo)</li>
<li>Abort uncommitted transactions (Undo)</li>
</ol>
</section>
<section>
<h3>ARIES Recovery</h3>
<svg data-src="2021-05-04/ARIES.svg" class="stretch" />
</section>
</section>
<section>
<section>
<h3>Datalog</h3>
<code>[head] :- [body]</code>
<p class="fragment">$$Q(A) :-~~ R(A, B), S(B, C)$$</p>
<p class="fragment">like <code>SELECT A FROM R NATURAL JOIN S</code></p>
<dl class="fragment">
<dt>A</dt>
<dd>Head Variable (appears in the head and body)</dd>
<dt>B, C</dt>
<dd>Existential Variables (appear only in the body)</dd>
</dl>
</section>
<section>
<p>Stop thinking about relations as collections of <b>records</b>, and instead think of them as collections of <b>facts</b></p>
</section>
<section>
<%= data_table(["A", "B"], [[1, 2], [1, 3], [2, 3], [2, 4]], name: "R", rowids: true) %>
<p class="fragment">The fact $R(1, 2)$ is <b>true</b>.</p>
<p class="fragment">The fact $R(2, 1)$ is <b>false</b> (or unknown).</p>
<p class="fragment">A table contains all facts that are provably true.</p>
</section>
<section>
<p style="margin-bottom: 50px;">$$Q(A) :-~~ R(A, B), S(B, C)$$</p>
For any $A$, the fact $Q(A)$ is true if...
<ul>
<li class="fragment">there is some $B$ and $C$ for which...</li>
<li class="fragment">the fact $R(A, B)$ is true, and...</li>
<li class="fragment">the fact $S(B, C)$ is true.</li>
</ul>
<p class="fragment" style="margin-top: 50px;">$\forall A : \big( \exists B, C : R(A, B) \wedge S(B, C) \big) \rightarrow Q(A)$</p>
</section>
<section>
<p style="margin-bottom: 50px;">
$$Q(A) :-~~ R(A, B), S(B, C)$$
$$Q(A) :-~~ R(A, B), R(B, C)$$
</p>
<p>Treat multiple rules as a disjunction. <br/>($Q(A)$ is true if <b>any</b> rule is satisfied)</p>
</section>
<section>
<h3>As powerful as Set-RA</h3>
<dl>
<div class="fragment">
<dt>Projection</dt>
<dd>$Q := \pi_A(R)$</dd>
<dd>$Q(A) :-~~ R(A, \ldots)$</dd>
</div>
<div class="fragment">
<dt>Union</dt>
<dd>$Q := R \cup S$</dd>
<dd>$Q(\ldots) :-~~ R(\ldots)$</dd>
<dd>$Q(\ldots) :-~~ S(\ldots)$</dd>
</div>
<div class="fragment">
<dt>Join</dt>
<dd>$Q := R \bowtie S$</dd>
<dd>$Q(\ldots) :-~~ R(\ldots), S(\ldots)$</dd>
</div>
</dl>
</section>
<section>
<dl>
<dt>Selection (Equality)</dt>
<dd>$Q := \sigma_{R.A = R.B}(R)$</dd>
<dd>$Q(A) :-~~ R(A, A)$</dd>
<div class="fragment">
<dt>Selection (Equality')</dt>
<dd>$Q := \sigma_{R.A = 1}(R)$</dd>
<dd>$Q(B) :-~~ R(1, B)$</dd>
</div>
<div class="fragment">
<dt>Selection (Other)</dt>
<dd>$Q := \sigma_{A > B}(R)$</dd>
<dd>$Q(A,B) :-~~ R(A, B), [[ A > B ]]$</dd>
</div>
</dl>
</section>
<section>
<%= data_table(
["A", "B"],
[[1, 0], [2, 0], [3, 0], "...", [2, 1], "..."],
name: "$[[ A > B ]]$",
build_in: :by_row
)%>
<p class="fragment">Relations are Sets of Facts. We can have a relation consisting of all pairs $A, B$ where $A$ is bigger.</p>
</section>
</section>
<section>
<section>
<ul>
<li>Why is this tuple in my query result?</li>
<li class="fragment">Why is this tuple <b>not</b> in my query result?</li>
<li class="fragment">Which datasets were used to create this value?</li>
<li class="fragment">How does this input affect my query output?</li>
</ul>
<h3 class="fragment" style="margin-top: 50px;">Provenance</h3>
</section>
<section>
<p>How does the input data relate to a query output.</p>
</section>
<section>
<h3>Types of Provenance</h3>
<dl style="font-size: 80%">
<div class="fragment" data-fragment-index="1">
<div class="fragment highlight-blue" data-fragment-index="6">
<dt>Why Provenance (Lineage)</dt>
<dd>What's the smallest fragment of my input needed to produce some row</dd>
</div>
</div>
<div class="fragment" data-fragment-index="2">
<dt>Why-Not Provenance</dt>
<dd>What's the least I can add to my input to get a desired row</dd>
</div>
<div class="fragment" data-fragment-index="3">
<div class="fragment highlight-blue" data-fragment-index="6">
<dt>How Provenance</dt>
<dd>An execution trace of the result; <u>How</u> were the tuples combined?</dd>
</div>
</div>
<div class="fragment" data-fragment-index="4">
<dt>Where Provenance</dt>
<dd>Which cell(s) was a given output value taken from</dd>
</div>
<div class="fragment" data-fragment-index="5">
<dt>Taint</dt>
<dd>Was the output affected by any "tainted" input cell/row</dd>
</div>
</dl>
</section>
<section>
<p><b>Idea: </b> Arithmetic models how a tuple was derived pretty well.</p>
</section>
<section>
<p>$[[ R(a, b) ]] \rightarrow \texttt{constant}$</p>
</section>
<section>
<p>$[[R(a, b) \cup S(a, b)]] \rightarrow [[R(a, b)]] \oplus [[S(a, b)]] $</p>
</section>
<section>
<p>$[[R(a, b) \times S(c, d)]] \rightarrow [[R(a, b)]] \otimes [[S(c, d)]] $</p>
</section>
<section>
<p>$[[\pi_a R(a, b)]] \rightarrow \sum_b [[R(a, b)]]]] $</p>
</section>
<section>
<table>
<tr><th>$\oplus$</th><th>$\otimes$</th><th>Effect</th></tr>
<tr><td>$+$</td><td>$\times$</td><td>Bag multiplicity</td></tr>
<tr><td>$\vee$</td><td>$\wedge$</td><td>Set existence</td></tr>
<tr><td>$\cup$</td><td>$\times$</td><td>Why provenance</td></tr>
<tr><td>min</td><td>max</td><td>Access control</td></tr>
</table>
</section>
</section>