当前位置: 首页 > news >正文

Trino 源码剖析

Functions

function 反射和注册

io.trino.operator.scalar.annotations.ScalarFromAnnotationsParser

这里是提取注解元素的方法
String baseName = scalarFunction.value().isEmpty() ? camelToSnake(annotatedName(annotated)) : scalarFunction.value();

这里如果 scalarFunction 的注解没有没有值,直接对函数名进行snake命名法

一般程序设计中,有两种变量命名规范:Snake方式和Camel方式。

  • Snake方式是指单词用小写字母,单词间下划线(“_”)代替空格;
  • Camel方式是指相邻单词首字母用大写表示,对单词加以区分。

例如,你想定义一个变量表示一个数组数字之和,并且用英文“sum of array”。我们使用Snake方式的变量名为:sum_of_array;用Camel命名方式的变量名为:sumOfArray。

  public static List<ScalarImplementationHeader> fromAnnotatedElement(AnnotatedElement annotated){ScalarFunction scalarFunction = annotated.getAnnotation(ScalarFunction.class);ScalarOperator scalarOperator = annotated.getAnnotation(ScalarOperator.class);Optional<String> description = parseDescription(annotated);ImmutableList.Builder<ScalarImplementationHeader> builder = ImmutableList.builder();if (scalarFunction != null) {String baseName = scalarFunction.value().isEmpty() ? camelToSnake(annotatedName(annotated)) : scalarFunction.value();builder.add(new ScalarImplementationHeader(baseName, new ScalarHeader(description, scalarFunction.hidden(), scalarFunction.deterministic())));for (String alias : scalarFunction.alias()) {builder.add(new ScalarImplementationHeader(alias, new ScalarHeader(description, scalarFunction.hidden(), scalarFunction.deterministic())));}}if (scalarOperator != null) {builder.add(new ScalarImplementationHeader(scalarOperator.value(), new ScalarHeader(description, true, true)));}List<ScalarImplementationHeader> result = builder.build();checkArgument(!result.isEmpty());return result;}

io.trino.operator.scalar.annotations.ScalarImplementationHeader
在这里插入图片描述

private static String annotatedName(AnnotatedElement annotatedElement){if (annotatedElement instanceof Class<?>) {return ((Class<?>) annotatedElement).getSimpleName();}if (annotatedElement instanceof Method) {return ((Method) annotatedElement).getName();}checkArgument(false, "Only Classes and Methods are supported as annotated elements.");return null;}

由上可得 method 也是一种 AnnotatedElement

trino 中的 snake 命名法

io.trino.operator.scalar.annotations.ScalarImplementationHeader

private static String camelToSnake(String name){return LOWER_CAMEL.to(LOWER_UNDERSCORE, name);}

com.google.common.base.CaseFormat

  /*** Converts the specified {@code String str} from this format to the specified {@code format}. A* "best effort" approach is taken; if {@code str} does not conform to the assumed format, then* the behavior of this method is undefined but we make a reasonable effort at converting anyway.*/public final String to(CaseFormat format, String str) {checkNotNull(format);checkNotNull(str);return (format == this) ? str : convert(format, str);}
  /** Enum values can override for performance reasons. */String convert(CaseFormat format, String s) {// deal with camel conversionStringBuilder out = null;int i = 0;int j = -1;while ((j = wordBoundary.indexIn(s, ++j)) != -1) {if (i == 0) {// include some extra space for separatorsout = new StringBuilder(s.length() + 4 * format.wordSeparator.length());out.append(format.normalizeFirstWord(s.substring(i, j)));} else {requireNonNull(out).append(format.normalizeWord(s.substring(i, j)));}out.append(format.wordSeparator);i = j + wordSeparator.length();}return (i == 0)? format.normalizeFirstWord(s): requireNonNull(out).append(format.normalizeWord(s.substring(i))).toString();}

在这里插入图片描述

相关文章:

Trino 源码剖析

Functions function 反射和注册 io.trino.operator.scalar.annotations.ScalarFromAnnotationsParser 这里是提取注解元素的方法 String baseName scalarFunction.value().isEmpty() ? camelToSnake(annotatedName(annotated)) : scalarFunction.value(); 这里如果 scala…...

element表格自定义筛选

文章目录 前言一、简介二、效果展示三、源码总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; …待续 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、简介 修改el-table的筛选…待续 二、效果展示 三、源码 使用方法…...

全方位 Linux 性能调优经验总结

Part1Linux性能优化 1性能优化 性能指标 高并发和响应快对应着性能优化的两个核心指标&#xff1a;吞吐和延时 图片来自: www.ctq6.cn 应用负载角度&#xff1a;直接影响了产品终端的用户体验系统资源角度&#xff1a;资源使用率、饱和度等 性能问题的本质就是系统资源已经…...

Linux机器网络检查

查看DNS file: dianTestLRSSnapshot:~$ cat /etc/resolv.conf # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file…...

使用示例和应用程序全面了解高效数据管理的Golang MySQL数据库

Golang&#xff0c;也被称为Go&#xff0c;已经成为构建强大高性能应用程序的首选语言。在处理MySQL数据库时&#xff0c;Golang提供了一系列强大的库&#xff0c;简化了数据库交互并提高了效率。在本文中&#xff0c;我们将深入探讨一些最流行的Golang MySQL数据库库&#xff…...

ubuntu 22.04 源码安装 apollo 8.0

对于其他的关于GPU的安装包需求&#xff0c;这里不再列出&#xff0c;因为我之前安装过&#xff0c;偷个懒就不写了&#xff0c;哈哈哈哈1, 安装docker 安装docker命令(这里的安装命令都是在docker官网,还有安装包)&#xff1a; 1&#xff0c; 设置docker的apt仓库 # Add Do…...

RK3588编译MXNet框架

目录 1. 背景 2.编译MXNet准备 3.开发板编译 1. 背景 MXNet&#xff08;也称为Apache MXNet或incubator-mxnet&#xff09;是一个开源的深度学习框架&#xff0c;它最初由华为和亚马逊AWS共同开发&#xff0c;并于2017年成为Apache软件基金会的孵化项目。MXNet旨在提供高效、…...

港府Web3宣言周年思考:合规困境中的“隐患”

出品&#xff5c;欧科云链研究院 作者&#xff5c;毕良寰 距离《有关虚拟资产在港发展的政策宣言》已过去一年&#xff0c;我们欧科云链研究院在分析全球几个主要国家和地区对Web3的监管政策及态度后&#xff0c;对港府的雄心壮志充满期待。然而&#xff0c;由于近期一些庞氏骗…...

vue点击按钮跳转页面

在Vue.js中&#xff0c;你可以使用<router-link>或this.$router.push()来实现点击按钮跳转页面的功能&#xff0c;前提是你已经配置了Vue Router。以下是两种不同的方法来实现页面跳转&#xff1a; 方法一&#xff1a;使用<router-link> <router-link> 是Vu…...

大中小企业对CRM系统的需求

在以前&#xff0c;CRM客户管理系统是大型企业的专属。如今&#xff0c;不论何种规模的企业都能够使用CRM系统。市面上的CRM有着丰富的功能类型&#xff0c;管理者可以从企业自身规模出发&#xff0c;选择适合的CRM系统。下面说说&#xff0c;大中小企业对CRM系统的需求。 一句…...

.net core iis 发布后登入的时候请求不到方法报错502

.net core iis 发布后登入的时候请求不到方法报错502 502 bad gateway 502 - Web 服务器在作为网关或代理服务器时收到了无效响应。 您要查找的页面有问题&#xff0c;无法显示。当 Web 服务器(作为网关或代理)与上游内容服务器联系时&#xff0c;收到来自内容服务器的无效…...

知识图谱实战应用30-知识图谱在反欺诈情报分析项目中的应用实践

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用30-知识图谱在反欺诈情报分析项目中的应用实践,现代商业环境中,各类欺诈行为日益猖獗,严重影响企业的运营和社会秩序。传统的欺诈检测方法难以满足实时性和有效性方面的要求。本文介绍了采用知识图谱技术构建反欺诈情报…...

[云原生1. ] 使用Docker-compose一键部署Wordpress平台

文章目录 1. Docker-compose概述1.1 简介1.2 docker-compose 的三大概念1.3 docker-compose配置模板文件常用的字段1.4 docker-compose 常用命令及格式 2. YAML 文件的详细介绍及编写注意事项2.1 简介2.2 yaml的特性2.2.1 语法特点2.2.2 数据结构2.2.3 引号的区别2.2.4 内置类型…...

springboot--基本特性--自定义 Banner

SpringApplication的使用 前言效果1.1 自定义banner1.2 自定义SpringApplication配置文件优先级高于程序化调整的优先级启动自定义banner关闭自定义banner 1.3 FluentBuilder API 前言 修改启动时候的修改banner 效果 1.1 自定义banner banner制定官网链接 在配置文件中设置…...

Vue3:checkbox使用及限制选中数量

HTML&#xff1a; <!--投票列表--> <ul class"list f16"><li v-for"(list,index) in listData" :key"index" ><!--div click"goAbout(list.orderid)">img :src"list.thumb"<span><i>编…...

​如何选择更快更稳定的存储服务器​

如何选择更快更稳定的存储服务器 选择更快、更稳定的存储服务器需要考虑以下几个方面&#xff1a; 存储介质&#xff1a;存储服务器的主要存储介质包括固态硬盘和机械硬盘。相比于机械硬盘&#xff0c;固态硬盘具有更高的读写速度和更低的延迟&#xff0c;因此能够提供更快的数…...

AcWing89. a^b

题目 求 a a a 的 b b b 次方对 p p p 取模的值。 输入格式 三个整数 a , b , p , a,b,p, a,b,p, 在同一行用空格隔开。 输出格式 输出一个整数&#xff0c;表示 a^b mod p 的值。 数据范围 0 ≤ a , b ≤ 1 0 9 0≤a,b≤10^9 0≤a,b≤109 1 ≤ p ≤ 1 0 9 1≤p≤10^…...

【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读

【推荐系统】推荐算法&#xff1a;冷启动-召回-粗排-精排-重排 解读 文章目录 【推荐系统】推荐算法&#xff1a;冷启动-召回-粗排-精排-重排 解读1. 介绍2. 冷启动2.1 用户冷启动2.1.1 利用用户注册信息冷启动2.1.2 好物推荐冷启动2.1.3 问题启发式冷启动2.1.4 社交冷启动2.1.…...

NB-IOT的粮库挡粮门异动监测装置

一种基于NBIOT的粮库挡粮门异动监测装置,包括若干个NBIOT开门监测装置,物联网后台管理系统,NBIOT低功耗广域网络和用户访问终端;各个NBIOT开门监测装置通过NBIOT低功耗广域网络与物联网后台管理系统连接,物联网后台管理系统与用户访问终端连接.NBIOT开门监测装置能够对粮库挡粮…...

六、【图像去水印】

文章目录 裁剪法移动复制法内容识别去水印色阶法去水印消失点法去水印反相混合法 裁剪法 处于边缘的水印&#xff0c;通过裁剪去除&#xff0c;如下图&#xff1a; 移动复制法 移动复制法适用于水印的背景这部分区域比较相似的情况下使用&#xff0c;如下图先使用矩形选区选中…...

从U盘启动OpenWRT:零门槛打造你的x86软路由实验平台

1. 为什么选择U盘启动OpenWRT软路由&#xff1f; 去年我帮朋友改造旧笔记本时&#xff0c;偶然发现用U盘跑OpenWRT简直是个宝藏方案。相比直接刷入硬盘&#xff0c;U盘启动有三大不可替代的优势&#xff1a;零成本实验、无损体验和随身携带。你完全可以用吃灰的旧U盘&#xff0…...

iTop实战指南:3个关键挑战与ITSM平台架构优化策略

iTop实战指南&#xff1a;3个关键挑战与ITSM平台架构优化策略 【免费下载链接】iTop A simple, web based CMDB & IT Service Management tool 项目地址: https://gitcode.com/gh_mirrors/it/iTop 在数字化转型浪潮中&#xff0c;企业IT服务管理面临配置信息分散、…...

Perplexity认证备考资源严重稀缺!仅开放3个月的模拟题库已限流,速领2024Q3最新版PDF+视频解析

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity认证考试概览与最新动态 Perplexity认证考试是由Perplexity AI官方推出的面向开发者、AI工程师及技术决策者的专业能力评估体系&#xff0c;旨在验证考生在大语言模型原理、提示工程实践、API集成、…...

暖风机如何实现稳定高效的采暖输出?

一、核心结论NT‑5TS型暖风机可依托标准化结构与性能参数&#xff0c;满足常规工业空间采暖供热需求&#xff0c;整体运行能耗合理、散热效率稳定&#xff0c;适配多场景采暖工况。该设备经暖通设备性能检测标准核验&#xff0c;在额定工况下各项指标均达到行业通用使用要求&am…...

如何在Inkscape中快速实现专业级光线追踪?终极免费光学设计指南

如何在Inkscape中快速实现专业级光线追踪&#xff1f;终极免费光学设计指南 【免费下载链接】inkscape-raytracing An extension for Inkscape that makes it easier to draw optical diagrams. 项目地址: https://gitcode.com/gh_mirrors/in/inkscape-raytracing Inks…...

Windows远程桌面终极解锁指南:RDP Wrapper完整使用方案

Windows远程桌面终极解锁指南&#xff1a;RDP Wrapper完整使用方案 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows家庭版无法使用远程桌面而烦恼吗&#xff1f;是否曾经羡慕专业版用户能够享受多用户…...

VPU与NPU协同优化:边缘AI视觉处理的算力融合实践

1. 项目概述&#xff1a;边缘计算时代的算力融合新范式最近和几个做嵌入式AI和边缘设备的老朋友聊天&#xff0c;大家不约而同地都在讨论一个话题&#xff1a;在资源受限的边缘端&#xff0c;如何把有限的算力“榨干”&#xff0c;让模型跑得更快、更省电。聊着聊着&#xff0c…...

告别枯燥协议!用Python脚本+逻辑分析仪实测JESD204B的F和K参数

告别枯燥协议&#xff01;用Python脚本逻辑分析仪实测JESD204B的F和K参数 在高速串行通信领域&#xff0c;JESD204B协议因其高效率而备受青睐&#xff0c;但抽象的参数定义常常让工程师望而生畏。本文将以一种全新的实践视角&#xff0c;带您通过Python脚本和逻辑分析仪&#x…...

Adobe-GenP 3.0终极指南:5分钟快速免费激活Adobe全系列软件

Adobe-GenP 3.0终极指南&#xff1a;5分钟快速免费激活Adobe全系列软件 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款革命性的Adobe Creative Cl…...

从汽车电子到工业控制:手把手教你用STM32CubeMX和HAL库玩转CAN总线多节点通信

从零构建工业级CAN总线通信系统&#xff1a;基于STM32CubeMX的实战指南 1. CAN总线技术基础与工业应用场景 在现代工业控制系统中&#xff0c;CAN总线因其高可靠性和实时性已成为设备间通信的事实标准。不同于普通串行通信&#xff0c;CAN采用差分信号传输和先进的错误检测机…...