private void CheckTargetClear()
        {
            Debug.Assert(target.WasCleared());

            TernaryTable.Iter123 it = source.table.GetIter();
            while (!it.Done())
            {
                int arg1 = it.Get1();
                int arg2 = it.Get2();
                if (source.Contains12(arg1, arg2) && !target.Contains(arg1, arg2))
                {
                    throw DeletionForeignKeyViolation(arg1, arg2);
                }
                it.Next();
            }
        }
        public void Check()
        {
            if (source.HasInsertions())
            {
                long[] buffer = source.Insertions(this.buffer, counter);
                int    count  = counter[0];
                for (int i = 0; i < count; i++)
                {
                    long entry = buffer[i];
                    int  arg1  = BinaryTableUpdater.Arg1(entry);
                    int  arg2  = BinaryTableUpdater.Arg2(entry);
                    if (!target.Contains12(arg1, arg2))
                    {
                        throw InsertionForeignKeyViolation(arg1, arg2);
                    }
                }
            }

            target.CheckDeletes123(this);
        }