`
丁林.tb
  • 浏览: 797211 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL 聚集UDF,计算列表中的奇数总和

阅读更多

 

 技痒之作 -__-

 

 CREATE AGGREGATE FUNCTION oddsum returns INTEGER SONAME "udf_oddsum.so";

CREATE TABLE `v1` (

  `c` int(11) DEFAULT NULL,

  `id` int(11) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into v1 values(1,0), (3,2), (4,4);

 

 select sum(c),oddsum(c) from v1;

+--------+-----------+

| sum(c) | oddsum(c) |

+--------+-----------+

|      8 |         4 |

+--------+-----------+

  

 

#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif

#include <ctype.h>
#include <my_global.h>
#include <my_sys.h>
#include <mysql.h>

my_bool oddsum_init(UDF_INIT *init, UDF_ARGS *args, char *message)
{
  if (args->arg_count != 1 || args->arg_type[0] != INT_RESULT) {
    return 1;
  }

  init->ptr = (char *)(malloc(sizeof(longlong)));
  bzero((void*)init->ptr, sizeof(longlong));
  return 0;
}

void oddsum_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
  if (!args->args[0])
    return;

  longlong new_value= *((longlong*)args->args[0]);

  if (new_value % 2)
  {
    longlong *current_sum= (longlong *)initid->ptr;
    *current_sum+= new_value;
  }
}

void
oddsum_clear(UDF_INIT* initid, char* is_null __attribute__((unused)),
                  char* message __attribute__((unused)))
{ 
  bzero((void*)initid->ptr, sizeof(longlong));
}

void oddsum_deinit(UDF_INIT *init)
{
  if (init->ptr) {
    free(init->ptr);
  }
}

longlong oddsum(UDF_INIT* initid, UDF_ARGS* args __attribute__((unused)),
    char* is_null, char* error __attribute__((unused)))
{
  return *(longlong *)initid->ptr;
}

 

0
0
分享到:
评论

相关推荐

    mysql-udf-http下载

    MySQL UDF (User Defined Function) 是 MySQL 数据库系统中的一种扩展机制,允许用户自定义函数以处理特定的数据操作。在本场景中,`mysql-udf-http` 是一个特殊的 UDF 库,它为 MySQL 提供了通过 HTTP 协议进行数据...

    mysql-udf-http

    MySQL UDF (User Defined Function) 是 MySQL 数据库系统中一个非常重要的特性,它允许用户自定义函数来扩展数据库的功能。"mysql-udf-http" 是一个特定的 UDF 库,专门为 MySQL 设计,用于在 SQL 查询中直接执行 ...

    MYSQL_UDF-5.0.rar_mysql udf_udf_udf mysql

    在MySQL中,UDF可以分为几种类型,包括标量函数、聚合函数和表值函数。标量函数返回单个值,如数学运算或字符串操作;聚合函数处理一组行并返回单个值,如SUM或COUNT;而表值函数则返回一个结果集。 在描述中提到的...

    mysql-udf-http.c

    mysql-udf-http.c编译此文件之后可使用MySQL中http_post或http_get方法,此处为原文件,需要自行编译,请谨慎下载。备注:如发现此文件编译时缺少文件可自行下载

    lib_mysqludf_sys 的win版本dll库

    lib_mysqludf_sys可能是MySQL用户定义函数(User-Defined Function, UDF)的一个实现,允许用户在MySQL数据库中自定义计算逻辑。 **关于lib_mysqludf_sys** lib_mysqludf_sys可能是一个扩展了MySQL功能的库,提供...

    MYSQL_UDF 5.0.rar

    在MySQL中,UDF是通过C语言编写的,并且必须遵循MySQL的API来实现。这个压缩包可能包含了以下关键部分: 1. **头文件**:如`mysql.h`,这是与MySQL服务器通信的基础,包含了定义函数接口和数据类型的头文件。 2. *...

    mysql-udf-http1.0附教程

    MySQL UDF (User Defined Function) 是 MySQL 数据库系统的一个特性,允许用户自定义函数来扩展其功能。HTTP 1.0 UDF 模块是专为 MySQL 设计的一个插件,它使数据库能够直接与 HTTP 服务器进行交互,执行 HTTP 请求...

    MYSQL的UDF开发的测试程序

    1. **设计函数接口**:首先,你需要确定UDF的功能,比如计算两个数的乘积、字符串连接等。定义函数原型,包括返回类型和参数列表。 2. **编写源代码**:使用C或C++编写源代码,包含函数实现和必要的初始化、清理等...

    lib_mysqludf_sys

    这时,"lib_mysqludf_sys"应运而生,它是一套用于MySQL的系统命令用户定义函数(UDF),可以让我们在MySQL查询中直接调用系统命令。 "lib_mysqludf_sys"是由第三方开发者提供的扩展库,主要目标是为MySQL提供与操作...

    MYSQL的UDF开发的资源文件

    在MySQL中,UDF主要分为三类:C语言编写的二进制UDF、存储过程和Java插件。这里我们主要关注C语言编写的二进制UDF,因为这是最常见且灵活性最高的方式。 1. **创建UDF的基本步骤** - **编写源代码**:使用C或C++...

    gearman-mysql-udf-0.6.tar.gz

    - **定义**:MySQL UDF 允许开发者编写自己的函数,将其集成到 MySQL 查询中,扩展其内置函数库。 - **类型**:UDFs 分为整数、字符串、时间和二进制四种类型。 - **作用**:通过 UDF,MySQL 可以调用外部程序或...

    mysql udf c文件

    在MySQL中,UDF的开发主要包括以下几个关键步骤: 1. **设计函数接口**:首先,你需要设计UDF的输入参数和返回类型。UDF函数需要遵循MySQL提供的特定接口,如`MYSQL_UDF DEF*`宏定义,以便MySQL能够正确调用和处理...

    mysql_udf_redis.tar.bz2

    mysql_udf_redis,将数据库中的数据同步到Redis。Redis中的数据变化同步到数据库,那么这里是将Redis做为db,而真的db,数据库只作为备份

    mysql提权udf

    然后,通过SQL注入或其他手段,将这个UDF注入到MySQL服务器的系统表中,例如`mysql.func`。 2. **免杀技术**:"免杀"是指绕过安全防护机制,使得恶意代码不被检测到。在UDF提权中,可能涉及到修改UDF的行为,使其在...

    MYSQL高版本低版本UDF提权工具

    UDF(User Defined Function)的原理是,MySQL允许用户编写C语言的库,并将其加载到服务器中,作为新的内置函数使用。这些函数可以执行原本MySQL不支持的操作,或者增强已有的功能。UDF分为两种类型:存储过程和函数...

    MYSQL提权UDF.dll

    在MySQL中,UDF允许开发人员创建自己的函数,这些函数可以被SQL查询调用,类似于内置的数学、字符串或日期函数。但是,当UDF与不安全的代码或权限管理结合时,攻击者可能能够利用此功能执行未授权的操作,比如获取...

    mysql-udf-http-1.0下载

    MySQL UDF (User Defined Function) 是 MySQL 数据库系统的一个特性,允许用户自定义数据库操作中的函数,以扩展其功能。`mysql-udf-http-1.0` 是一个专门用于在 MySQL 中处理 HTTP 请求的 UDF 库。这个库允许你在 ...

    mysqludf库

    MySQL UDF(User Defined Function)库,全称为MySQL用户自定义函数库,是MySQL数据库系统中的一种扩展机制,允许开发者创建自己的函数以增强数据库的功能。`mysqludf库`特别是`lib_mysqludf_sys`是这个领域的一个...

    mysql udf提权文件

    mysql udf提权文件mysql udf提权文件

    mysql汉字转拼音简码UDF

    在MySQL中,UDF(User Defined Function)是开发者可以编写并集成到数据库服务器中的代码模块,它们可以是C、C++或其他支持的语言编写的。这种功能使得MySQL能够执行原本不包含在标准SQL语句中的特定操作,例如这里...

Global site tag (gtag.js) - Google Analytics