sources/linetester/linetest.sql (106 lines of code) (raw):

/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -- This file generates linetest.c, linetest.c is licensed per the below. -- ------ cql-verify db helpers @echo c, "\n"; @echo c, "\n"; @echo c, "//\n"; @echo c, "// This file is auto-generated by linetest.sql, it is checked in just\n"; @echo c, "// in case CQL is broken by a change. The Last Known Good Verifier\n"; @echo c, "// can be used to verify the tests pass again, or report failures\n"; @echo c, "// while things are still otherwise broken. Rebuild with 'regen.sh'\n"; @echo c, "//\n"; @echo c, "\n"; declare procedure printf no check; -- setup the table and the index create procedure linetest_setup() begin create table linedata( source text not null, procname text not null, line integer not null, data text not null, physical_line integer not null ); create table procs( procname text not null primary key); create index __idx__test_lines on linedata (source, procname); end; -- add a row to the results table create procedure linetest_add(like linedata) begin insert into linedata from arguments; insert or ignore into procs from arguments(like procs); end; create procedure linetest_dump() begin declare C cursor for select * from linedata; loop fetch C begin call printf("%s %s %4d %3d %s\n", C.source, C.procname, C.physical_line, C.line, C.data); end; end; create proc dump_proc_records(source_ text not null, procname_ text not null) begin declare C cursor for select * from linedata where procname = procname_ and source = source_; loop fetch C begin call printf("%5d %s\n", C.line, C.data); end; end; create proc dump(procname text not null) begin call printf("%s: difference encountered\n", procname); call printf("<<<< EXPECTED\n"); call dump_proc_records("exp", procname); call printf(">>>> ACTUAL\n"); call dump_proc_records("act", procname); end; create procedure compare_lines( out procs integer not null, out compares integer not null, out errors integer not null) begin declare p cursor for select * from procs; loop fetch p begin set procs := procs + 1; declare actual cursor for select * from linedata where source = 'act' and procname = p.procname; declare expected cursor for select * from linedata where source = 'exp' and procname = p.procname; fetch actual; fetch expected; while actual and expected begin set compares := compares + 1; if (actual.line != expected.line or actual.data != expected.data) then call dump(p.procname); call printf("\nFirst difference:\n"); call printf("expected: %5d %s\n", expected.line, expected.data); call printf(" actual: %5d %s\n", actual.line, actual.data); call printf("\nDifferences at:\n line %d in expected\n line %d in actual", expected.physical_line, actual.physical_line); call printf("\n"); set errors := errors + 1; leave; end if; fetch actual; fetch expected; end; if (actual != expected) then if (not actual) then call dump(p.procname); call printf("\nRan out of lines in actual:\n"); call printf("\nDifferences at:\n line %d in expected\n", expected.physical_line); call printf("\n"); set errors := errors + 1; end if; if (not expected) then call dump(p.procname); call printf("\nRan out of lines in expected:\n"); call printf("\nDifferences at:\n line %d in actual\n", actual.physical_line); call printf("\n"); set errors := errors + 1; end if; end if; end; end;