Exemple #1
0
    def test_create_uda(self):
        def make_ex(serialize=False):
            if serialize:
                serialize = "\nserialize_fn='Serialize'"
            else:
                serialize = ""
            return (("CREATE AGGREGATE FUNCTION "
                     "bar.`test_name`(string, string)"
                     " returns bigint location '/foo/bar.so'"
                     "\ninit_fn='Init'"
                     "\nupdate_fn='Update'"
                     "\nmerge_fn='Merge'") + serialize +
                    "\nfinalize_fn='Finalize'")

        for ser in [True, False]:
            func = api.wrap_uda(
                '/foo/bar.so',
                self.inputs,
                self.output,
                update_fn='Update',
                init_fn='Init',
                merge_fn='Merge',
                finalize_fn='Finalize',
                serialize_fn='Serialize' if ser else None,
            )
            stmt = ddl.CreateUDA(func, name=self.name, database='bar')
            result = stmt.compile()
            expected = make_ex(ser)
            assert result == expected
Exemple #2
0
def test_create_uda(name, inputs, output, ser):
    def make_ex(serialize=False):
        lines = [
            f"CREATE AGGREGATE FUNCTION bar.`{name}`(string, string) returns bigint location '/foo/bar.so'",  # noqa: E501
            "init_fn='Init'",
            "update_fn='Update'",
            "merge_fn='Merge'",
        ]
        if serialize:
            lines.append("serialize_fn='Serialize'")
        lines.append("finalize_fn='Finalize'")
        return "\n".join(lines)

    func = api.wrap_uda(
        '/foo/bar.so',
        inputs,
        output,
        update_fn='Update',
        init_fn='Init',
        merge_fn='Merge',
        finalize_fn='Finalize',
        serialize_fn='Serialize' if ser else None,
    )
    stmt = ddl.CreateUDA(func, name=name, database='bar')
    result = stmt.compile()
    expected = make_ex(ser)
    assert result == expected
Exemple #3
0
def conforming_wrapper(
    where, inputs, output, prefix, serialize=True, name=None
):
    kwds = {'name': name}
    if serialize:
        kwds['serialize_fn'] = f'{prefix}Serialize'
    return api.wrap_uda(
        where,
        inputs,
        output,
        f'{prefix}Update',
        init_fn=f'{prefix}Init',
        merge_fn=f'{prefix}Merge',
        finalize_fn=f'{prefix}Finalize',
        **kwds,
    )
Exemple #4
0
def conforming_wrapper(where,
                       inputs,
                       output,
                       prefix,
                       serialize=True,
                       name=None):
    kwds = {'name': name}
    if serialize:
        kwds['serialize_fn'] = '{0}Serialize'.format(prefix)
    return api.wrap_uda(
        where,
        inputs,
        output,
        '{0}Update'.format(prefix),
        init_fn='{0}Init'.format(prefix),
        merge_fn='{0}Merge'.format(prefix),
        finalize_fn='{0}Finalize'.format(prefix),
        **kwds,
    )
Exemple #5
0
def wrapped_count_uda(uda_so):
    name = f'user_count_{util.guid()}'
    return api.wrap_uda(uda_so, ['int32'], 'int64', 'CountUpdate', name=name)
Exemple #6
0
def wrapped_count_uda(uda_so):
    name = 'user_count_{0}'.format(util.guid())
    return api.wrap_uda(uda_so, ['int32'], 'int64', 'CountUpdate', name=name)