File: mysql_checksum.c

package info (click to toggle)
pg-comparator 2.3.2-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 564 kB
  • sloc: perl: 5,349; ansic: 709; sql: 158; makefile: 62
file content (171 lines) | stat: -rw-r--r-- 4,192 bytes parent folder | download | duplicates (5)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/* $Id: mysql_checksum.c 1525 2014-08-03 12:34:17Z coelho $
 *
 * This function computes a simple and fast checksum of a binary
 * It is unclear to me what happends on different encodings.
 * NOT CRYPTOGRAPHICALLY SECURE.
 */

// minimal headers
#include <my_global.h>
#include <mysql.h>

/* Jenkins-based hash functions
 */
/* foo_init, foo, foo_deinit */
my_bool cksum8_init(UDF_INIT *, UDF_ARGS *, char *);
longlong cksum8(UDF_INIT *, UDF_ARGS *, char *, char *);
my_bool cksum4_init(UDF_INIT *, UDF_ARGS *, char *);
longlong cksum4(UDF_INIT *, UDF_ARGS *, char *, char *);
my_bool cksum2_init(UDF_INIT *, UDF_ARGS *, char *);
longlong cksum2(UDF_INIT *, UDF_ARGS *, char *, char *);

#include "jenkins.c"

longlong cksum2(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args,
  char *is_null,
  char *error __attribute__((unused)))
{
  // if in doubt, return NULL
  if (args->arg_count!=1 || args->arg_type[0]!=STRING_RESULT)
  {
    *is_null = 1;
    return 0;
  }
  return (longlong) checksum_int2(args->args[0], args->lengths[0]);
}

my_bool cksum2_init(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args __attribute__((unused)),
  char *message __attribute__((unused)))
{
  return 0;
}

longlong cksum4(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args,
  char *is_null __attribute__((unused)),
  char *error __attribute__((unused)))
{
  // if in doubt, return NULL
  if (args->arg_count!=1 || args->arg_type[0]!=STRING_RESULT)
  {
    *is_null = 1;
    return 0;
  }
  return (longlong) checksum_int4(args->args[0], args->lengths[0]);
}

my_bool cksum4_init(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args __attribute__((unused)),
  char *message __attribute__((unused)))
{
  return 0;
}

longlong cksum8(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args,
  char *is_null __attribute__((unused)),
  char *error __attribute__((unused)))
{
  // if in doubt, return NULL
  if (args->arg_count!=1 || args->arg_type[0]!=STRING_RESULT)
  {
    *is_null = 1;
    return 0;
  }
  return (longlong) checksum_int8(args->args[0], args->lengths[0]);
}

my_bool cksum8_init(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args __attribute__((unused)),
  char *message __attribute__((unused)))
{
  return 0;
}

/* FNV-based hash functions
 */
my_bool fnv8_init(UDF_INIT *, UDF_ARGS *, char *);
longlong fnv8(UDF_INIT *, UDF_ARGS *, char *, char *);
my_bool fnv4_init(UDF_INIT *, UDF_ARGS *, char *);
longlong fnv4(UDF_INIT *, UDF_ARGS *, char *, char *);
my_bool fnv2_init(UDF_INIT *, UDF_ARGS *, char *);
longlong fnv2(UDF_INIT *, UDF_ARGS *, char *, char *);

#include "fnv.c"

longlong fnv2(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args,
  char *is_null,
  char *error __attribute__((unused)))
{
  // if in doubt, return NULL
  if (args->arg_count!=1 || args->arg_type[0]!=STRING_RESULT)
  {
    *is_null = 1;
    return 0;
  }
  return (longlong) checksum_int2(args->args[0], args->lengths[0]);
}

my_bool fnv2_init(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args __attribute__((unused)),
  char *message __attribute__((unused)))
{
  return 0;
}

longlong fnv4(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args,
  char *is_null __attribute__((unused)),
  char *error __attribute__((unused)))
{
  // if in doubt, return NULL
  if (args->arg_count!=1 || args->arg_type[0]!=STRING_RESULT)
  {
    *is_null = 1;
    return 0;
  }
  return (longlong) checksum_int4(args->args[0], args->lengths[0]);
}

my_bool fnv4_init(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args __attribute__((unused)),
  char *message __attribute__((unused)))
{
  return 0;
}

longlong fnv8(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args,
  char *is_null __attribute__((unused)),
  char *error __attribute__((unused)))
{
  // if in doubt, return NULL
  if (args->arg_count!=1 || args->arg_type[0]!=STRING_RESULT)
  {
    *is_null = 1;
    return 0;
  }
  return (longlong) checksum_int8(args->args[0], args->lengths[0]);
}

my_bool fnv8_init(
  UDF_INIT *initid __attribute__((unused)),
  UDF_ARGS *args __attribute__((unused)),
  char *message __attribute__((unused)))
{
  return 0;
}