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

关于IvorySQL和OpenGauss包SPEC处理的一些思考

包的SPEC区可以定义下面三种类型(本篇只讨论SPEC区的情况)

  1. 变量
  2. 类型(nested table等)(注意这是包内定义的类型,与SQL创建的不通)
  3. 游标

这三种类型在PG原生中,是找不到相似的功能的:

  1. 变量:变量需要能够作用于所有PL代码中,PG中没有全局变量的这种概念,又因为PL的插件式设计和SQL层解耦,PL变量就算给SQL使用一般也只能用回调(PL的datums拼SQL的params)。
  2. 类型:这里的类型特指嵌套表、动态数组、关联数组。PG的类型全部放在pg_types中,不能在PL层创建。
  3. 游标:PG原生支持SQL层在事务内使用declare/fetch语法定义SQL层游标,但必须在事务块内;PG也支持在PL函数内定义游标,但能再当前函数内使用,不能跨函数。

三种类型有着不同的作用域:

SQL层PL层
变量用于函数默认值可当做全局变量随意使用
类型可当做基础类型随意使用
游标只能在定义包内使用,可跨函数使用

三种类型在PG中的实现方法:

  1. 变量:
    • 每个包应该有自己的符号表(命名空间),可以由namespace.pkgname唯一指定到某一个符号表进行搜索。
      • 这里IvorySQL使用pg_variable系统表来保存变量、游标(没实现集合类型),但不会存值,包变量本来就是session级的,按理说不需落盘,推测主要是用索引加速查找。
      • OpenGauss的实现类似于内存中维护各个包的符号表,使用时先搜索函数自己的符号表,再去搜索包的符号表。全内存态没落盘,确实没必要落盘。
    • 实现时可根据pkgname,先编译包,并生成包的符号表,SQL层可回调使用包变量,PL层可直接使用包变量。
    • 在PL层使用时,例如 a := pkg.g_var;,在PL parse时对二段解析增加搜索包命名空间的逻辑即可,不要发生deep copy,将包的datums拷贝到自己的datums中,这样的话会变得非常复杂,执行完还要拷贝回包空间中。
  2. 类型:分三类讨论
    • 嵌套表、动态数组:
      • 20230410:是现在内存中加一些旁路逻辑,增加类型的搜索范围。
      • 20231008:功能等价于数组,从生命周期上来看,包SPEC的类型和包的生命周期一致,从作用域来看,和pg_type中的类型范围有区别:例如SPEC的类型不能用于表字段,但能用于函数入参返回值;BODY中定义的PRIV的类型只能用于当前包。实现时可与SQL层的CREATE NESTED TABLE统一逻辑,做成标准类型记录在pg_type中,在增加字段表示作用域,可最大化复用PG原生逻辑。
    • 关联数组:功能等价与哈希表,
    • 高斯实现了类似于指针数组的功能,避免了PG多维数组的维度锁死的问题(第一次使用定义维度,后面无法修改),实现较为合理:《分析openGauss包内集合类型的实现方法》
    • IvorySQL没实现。

相关文章:

关于IvorySQL和OpenGauss包SPEC处理的一些思考

包的SPEC区可以定义下面三种类型(本篇只讨论SPEC区的情况) 变量类型(nested table等)(注意这是包内定义的类型,与SQL创建的不通)游标 这三种类型在PG原生中,是找不到相似的功能的&…...

我用PYQT5做的第一个实用的上位机项目(六)

将之前的画面和代码用复制粘贴的方法复制四份,就完成了整个主画面和主程序的基本构建。 下面的工作是关于PLC和通信。 上位机项目,其与PLC通信的模式很多都是这样的:在没有操作和设置的平常显示界面,按照预定周期从PLC读取当前页…...

【高级语言程序设计】python函数式编程(一)

基础知识 Python函数式编程的主要内容包括以下几个方面: (1)函数作为一等公民:在函数式编程中,函数被视为一等公民,可以像其他数据类型一样被传递、赋值以及作为返回值。 (2)不可变数据:函数式编程鼓励使用不可变数据…...

使用python查找指定文件夹下所有xml文件中带有指定字符的xml文件

文件夹目录如下(需要递归删除文件夹下的.DS_Store文件): labels文件夹下面是xml文件: import os import os.pathpath "name/labels" files os.listdir(path) # 得到文件夹下所有文件名称 s []for xmlFile in files:…...

flutter实现透明appbar(一)

前言 在项目中如何实现透明的appbar,方式一: 使用stack和positioned定位功能把appbar定位到页面的最上面, 实现 实现 Widget build(BuildContext context) {return Scaffold(body: Stack(children: [_homePage(), _appBar()],),);}_appbar…...

(四)正点原子STM32MP135移植——u-boot移植

一、概述 u-boot概述就不概述了,u-boot、kernel、dtb三件套,dddd 经过国庆艰苦奋战,已经成功把所有功能移植好了 二、编译官方代码 进入u-boot的目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf u-boot-stm32mp-v2022.10-stm32mp-r1-r0.…...

[计算机入门] 应用软件(办公类)

3.19 应用软件(办公类) 3.19.1 Microsoft office办公软件套件 Microsoft Office 是一套广泛使用的办公软件套件,由Microsoft公司开发和发布。它包含了多个应用程序,用于处理各种办公任务。以下是Office常见的几个应用程序: Microsoft Word…...

基于安卓android微信小程序音乐播放器

运行环境 小程序前端框架:uniapp 小程序运行软件:微信开发者 后端技术:javaSsm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 项目介绍 音乐播放器小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要…...

Java的指针、引用与C++的指针、引用的对比

笔者前两天在参加菜鸟面试的时候被面试官问到了这个问题,由于只在本科程序设计课上学过C,已经好久没有开发实际项目,所以对C相关的指针以及引用的记忆较为模糊,在此进行一定的知识汇总与梳理。 我们以面试中出现的问题为例来进行整…...

串级/级联控制知识点整理

串级控制系统是改善控制质量的有效方法之一,在过程控制中得到了广泛的应用。所谓串级控制,就是采用两个控制器串联工作,外环控制器的输出作为内环控制器的设定值,由内环控制器的输出去操纵控制阀,从而对外环被控量具有…...

数据产品读书笔记——认识数据产品经理

🌻大家可能听说的更多是产品经理这个角色,对数据产品经理可能或多或少了解一些,但又不能准确的描述数据产品经理的主要职能和与其他产品的不同,因此通过读一些书来对数据产品经理有一个准确且全面的认知。 目录 1. 数据的产品分类…...

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 创建虚拟机

文章目录 一、虚拟机二、关于消息的API发布消息直接交换机 DIRECT 转发规则扇出交换机 FANOUT 转发规则主题交换机 TOPIC 转发规则匹配规则Router类 订阅消息消费者队列如何给订阅的消费者发送消息自动发送消息至订阅者 应答消息 三、代码编写 一、虚拟机 接下来要创建虚拟机,…...

GIT版本控制--前言

欢迎来到《GIT版本控制》专栏!在当今软件开发和协作的世界中,版本控制是不可或缺的工具之一。无论您是一名初学者,一位经验丰富的开发者,还是一个项目团队的成员,都有可能会受益于对GIT的深入了解。 GIT是一个强大的分…...

由于 MAC 地址的问题,导致网络不通的原因和分析

由于 MAC 地址的问题,导致网络不通的原因和分析 将现象及原因分析发给大家,供大家参考,以后有类似问题时有个解决问题的参考开发板网络不通,也抓不到包,折腾了好久,将电脑和开发板用网线直连,结…...

游戏开发中的设计模式

单例模式 实例化单一对象,懒加载 //单例模式 class GameManagerSingleton {private constructor(){}private static instance:GameManagerSingleton;public static Instance(){if(!GameManagerSingleton.instance){this.instance new GameManagerSingleton();}re…...

React核心原理与实际开发

学习目标 React是啥? 官方定义:将前端请求获取到的数据渲染为HTML视图的JavaScript库。 一、React入门 1、React项目创建 直接创建react,使用初始化会创建package.json npm init -y再安装 2、React基本使用 使用纯JS创建ReactDOM&#…...

Springboot+vue的企业OA管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的企业OA管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的企业OA管理系统,采用M(m…...

3、字符设备驱动框架和开发步骤

一、Linux内核对文件的分类 Linux的文件种类 1、-:普通文件2、d:目录文件3、p:管道文件4、s:本地socket文件5、l:链接文件6、c:字符设备7、b:块设备 Linux内核按驱动程序实现模型框架的不同&…...

[MySQL]基础篇

文章目录 1. MySQL基本使用1.1 MySQL的启动和登录1.1.1 MySQL的启动1.1.2 MySQL的客户端连接 1.2 数据模型 2. SQL2.1 SQL类型2.1.1 数值类型2.1.2 字符串类型2.1.3 日期类型 2.2 DDL2.2.1 数据库操作2.2.2 表操作 - 查询2.2.3 表操作 - 创建表2.2.4 表操作 - 修改 2.3 DML2.3.…...

Meta Semantic Template for Evaluation of Large Language Models

本文是LLM系列文章,针对《Meta Semantic Template for Evaluation of Large Language Models》的翻译。 大型语言模型评估的元语义模板 摘要1 引言2 相关工作3 方法4 实验5 结论 摘要 大型语言模型(llm)是否真正理解语言的语义,或者只是记住训练数据?…...

记一次 uni-app开发微信小程序 textarea 的“伪遮挡”踩坑实录

文章目录1. 问题描述2. 出现原因3. 解决办法3.1. 给下单按钮添加z-index3.2. 调整textarea的z-index4. 问题解决1. 问题描述 在订单页面中,我使用了 textarea 作为备注输入框,底部有一个固定定位的“下单”按钮。当页面滚动时,textarea 会与…...

Minitab单因子方差分析实战:从数据导入到结果解读全流程(附油漆硬度案例)

Minitab单因子方差分析实战:从数据导入到结果解读全流程(附油漆硬度案例) 在工业质量控制和科研实验中,我们常常需要比较不同组别间的均值差异是否具有统计学意义。单因子方差分析(One-Way ANOVA)正是解决这…...

飞机表面缺陷识别分割数据集labelme格式4612张5类别

注意数据集中有超过一半图片是增强图片数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数):4612标注数量(json文件个数):4612标注类别数:5标注类别名称:["Crack"…...

3个高效解决Atlas OS中Xbox登录问题的终极技巧

3个高效解决Atlas OS中Xbox登录问题的终极技巧 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atlas Atlas…...

新手福音:基于快马平台和vmware官网快速上手虚拟化编程实践

作为一个刚接触虚拟化技术的新手,最近在浏览vmware官方中文网站时,发现了很多有用的学习资料。但光看理论总觉得不够直观,于是想通过动手实践来加深理解。在朋友的推荐下,我尝试用InsCode(快马)平台来创建一个简单的虚拟机监控面板…...

OFA-VE模型性能详解:OFA-Large在SNLI-VE测试集SOTA指标复现与解读

OFA-VE模型性能详解:OFA-Large在SNLI-VE测试集SOTA指标复现与解读 1. 引言:理解视觉蕴含的核心价值 视觉蕴含(Visual Entailment)是多模态人工智能领域的一个重要研究方向,它要解决的核心问题是:机器如何…...

2026年SCI论文AI率5%以下怎么做到?这3款降AI工具帮你稳过顶刊

投了三篇SCI,AI率问题折腾了快半年。 第一次投稿时完全不知道期刊有AI率要求,论文被直接拒稿,编辑在邮件里特别说明了AI生成内容的问题。从那以后就开始认真研究这个。先说结论:嘎嘎降AI(www.aigcleaner.com&#xff…...

全民拼购的“低门槛+全权益”,到底戳中了商业的哪个命门

一、先给全民拼购画个像:不是“割韭菜”,是“普惠式信任游戏”老陈一开始也怕:“拼购不都是‘砍一刀免费拿’‘拉3人返现’吗?我可不想踩红线。”我跟他说:新型全民拼购和传统拼购的本质区别,是“从‘赚快钱…...

开源协作机器人的架构革命:OpenArm如何重构机器人研发范式

开源协作机器人的架构革命:OpenArm如何重构机器人研发范式 【免费下载链接】openarm OpenArm v0.1 项目地址: https://gitcode.com/GitHub_Trending/op/openarm 当传统工业机械臂的封闭生态成为技术创新的桎梏,当高昂的硬件成本将学术研究拒之门外…...

聊天记录丢失?这款开源工具让数据安全不再愁

聊天记录丢失?这款开源工具让数据安全不再愁 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾经历过手机意外损坏后丢失数年聊天记录的痛苦&#xff1…...