File: fingerprint.c

package info (click to toggle)
libpg-query 17-6.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 32,420 kB
  • sloc: ansic: 171,152; sql: 78,873; ruby: 1,547; makefile: 266; cpp: 221
file content (53 lines) | stat: -rw-r--r-- 1,221 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <pg_query.h>
#include <pg_query_fingerprint.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "fingerprint_tests.c"

int main()
{
	size_t i;
	bool ret_code = 0;

	for (i = 0; i < testsLength; i += 2)
	{
		PgQueryFingerprintResult result = pg_query_fingerprint(tests[i]);

		if (result.error)
		{
			ret_code = -1;
			printf("%s\n", result.error->message);
			pg_query_free_fingerprint_result(result);
			continue;
		}
		else if (strcmp(result.fingerprint_str, tests[i + 1]) == 0)
		{
			printf(".");
		}
		else
		{
			ret_code = -1;
			printf("INVALID result for \"%s\"\nexpected: \"%s\"\nactual: \"%s\"\nactual tokens: ", tests[i], tests[i + 1], result.fingerprint_str);
			pg_query_fingerprint_with_opts(tests[i], PG_QUERY_PARSE_DEFAULT, true);
		}

		pg_query_free_fingerprint_result(result);
	}

	// Ensures that there isn't a memory leak in the error case
	PgQueryFingerprintResult result = pg_query_fingerprint("SELECT !");
	if (strcmp(result.error->message, "syntax error at end of input") != 0) {
		printf("\nERROR mismatch: %s\n", result.error->message);
		return EXIT_FAILURE;
	}
	pg_query_free_fingerprint_result(result);

	printf("\n");

	pg_query_exit();

	return ret_code;
}