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

批量网站建设网站域名申请费用

批量网站建设,网站域名申请费用,网页设计什么专业能学,求推荐专门做借条的网站ALTER TABLE#xff08;SET attribute_option#xff09; ATExecSetOptions 函数 声明#xff1a;本文的部分内容参考了他人的文章。在编写过程中#xff0c;我们尊重他人的知识产权和学术成果#xff0c;力求遵循合理使用原则#xff0c;并在适用的情况下注明引用来源。… ALTER TABLESET attribute_option ATExecSetOptions 函数 声明本文的部分内容参考了他人的文章。在编写过程中我们尊重他人的知识产权和学术成果力求遵循合理使用原则并在适用的情况下注明引用来源。 本文主要参考了 OpenGauss5.1.0 的开源代码和《OpenGauss数据库源码解析》一书 ALTER COLUMN ... SET attribute_option 是一种 SQL 命令用于修改数据库表中特定列的属性选项。在 OpenGauss 中这种命令可以用来改变列的默认值、是否允许为空、数据类型等属性以满足不同的业务需求或数据结构变更。   在 OpenGauss 的源代码中处理 ALTER COLUMN SET 和 ALTER COLUMN RESET 的逻辑通常涉及到调用 ATExecSetOptions 函数。例如当 SQL 命令中包含 SET ( options ) 时会执行 ATExecSetOptions 函数来实际应用这些选项而当包含 RESET ( options ) 时则会反向执行这些选项的重置操作。   ATExecSetOptions 函数的作用是根据传入的参数对指定表的特定列应用或重置属性选项。这包括解析和验证命令中的选项然后更新表的元数据确保数据库表的结构变更符合预期并且安全。这个函数不仅仅负责修改列的默认值还可能涉及到其他属性的调整如约束条件或索引的更新。   总之通过 ALTER COLUMN ... SET attribute_option 命令和相关的函数调用OpenGauss 提供了强大的能力来动态调整和管理数据库表的结构从而支持复杂的应用和业务需求变化。 ATExecSetOptions 函数 ATExecSetOptions 函数是实现 ALTER COLUMN ... SET/RESET attribute_option 功能的核心逻辑。它通过修改指定表中特定列的属性选项包括默认值、是否允许为空等具体步骤包括打开系统表、获取目标列的元数据、验证和更新选项值最后将修改应用到系统目录并确保索引更新从而保证数据库表结构的变更和一致性。其执行流程如下 打开 pg_attribute 系统表获取对应关系的独占锁。在系统缓存中搜索并获取指定列名的元组。如果未找到有效的列元组报错指示指定的列在目标表中不存在。从列元组中获取列的属性信息包括列号attnum等。验证传入的选项参数确保其为列表List类型并禁止为系统列设置选项。根据传入的选项使用 transformRelOptions 函数生成新的属性选项attoptions的文本数组。调用 attribute_reloptions 函数验证新生成的选项是否合法。准备一个新的替换数组根据新选项是否为 NULL 设置相应的值。使用 tableam_tops_modify_tuple 函数构建新的 HeapTuple 对象用于更新系统表中的列元组。释放之前获取的原始列元组缓存。使用 simple_heap_update 函数将更新后的新元组写入系统表中并更新系统表的索引。设置返回的对象地址指示操作的对象为目标表中的指定列。释放不再需要的 HeapTuple 对象。关闭 pg_attribute 系统表释放其占用的独占锁。返回最终的对象地址表示 ALTER COLUMN ... SET 操作的成功完成。 函数源码如下所示路径src\gausskernel\optimizer\commands\tablecmds.cpp static ObjectAddress ATExecSetOptions(Relation rel, const char* colName, Node* options, bool isReset, LOCKMODE lockmode) {// 打开属性关系的堆表Relation attrelation;// 原始元组、新元组和属性元组HeapTuple tuple, newtuple;Form_pg_attribute attrtuple;// 列号AttrNumber attnum;// 数据、新选项Datum datum, newOptions;bool isnull false;// 替换值数组Datum repl_val[Natts_pg_attribute];// 替换空值标志数组bool repl_null[Natts_pg_attribute];// 替换标志数组bool repl_repl[Natts_pg_attribute];// 返回对象地址ObjectAddress address;// 打开属性关系表attrelation heap_open(AttributeRelationId, RowExclusiveLock);// 根据列名从系统缓存中查找元组tuple SearchSysCacheAttName(RelationGetRelid(rel), colName);// 如果未找到有效元组报错if (!HeapTupleIsValid(tuple))ereport(ERROR,(errcode(ERRCODE_UNDEFINED_COLUMN),errmsg(column \%s\ of relation \%s\ does not exist, colName, RelationGetRelationName(rel))));// 获取属性元组结构attrtuple (Form_pg_attribute)GETSTRUCT(tuple);// 获取列号attnum attrtuple-attnum;// 如果列号小于等于0报错不支持修改系统列if (attnum 0)ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg(cannot alter system column \%s\, colName)));// 断言选项为列表类型Assert(IsA(options, List));// 禁止为属性设置选项ForbidToSetOptionsForAttribute((List*)options);// 生成新的建议 attoptions文本数组datum SysCacheGetAttr(ATTNAME, tuple, Anum_pg_attribute_attoptions, isnull);newOptions transformRelOptions(isnull ? (Datum)0 : datum, (List*)options, NULL, NULL, false, isReset);// 验证新选项(void)attribute_reloptions(newOptions, true);// 构建新元组rc memset_s(repl_null, sizeof(repl_null), false, sizeof(repl_null));securec_check(rc, \0, \0);rc memset_s(repl_repl, sizeof(repl_repl), false, sizeof(repl_repl));securec_check(rc, \0, \0);// 构建新的元组并更新if (newOptions ! (Datum)0)repl_val[Anum_pg_attribute_attoptions - 1] newOptions;elserepl_null[Anum_pg_attribute_attoptions - 1] true;repl_repl[Anum_pg_attribute_attoptions - 1] true;newtuple (HeapTuple) tableam_tops_modify_tuple(tuple, RelationGetDescr(attrelation), repl_val, repl_null, repl_repl);ReleaseSysCache(tuple);// 更新系统目录simple_heap_update(attrelation, newtuple-t_self, newtuple);CatalogUpdateIndexes(attrelation, newtuple);ObjectAddressSubSet(address, RelationRelationId,RelationGetRelid(rel), attnum);tableam_tops_free_tuple(newtuple);// 关闭属性关系表heap_close(attrelation, RowExclusiveLock);// 返回对象地址return address; }
http://www.pierceye.com/news/476032/

相关文章:

  • 南昌网站建设公司收费桂林做网站的公司有哪些
  • 南京网站建设方案智能管理系统
  • 黄埔网站建设价格资源网站推广
  • 桦南县建设局网站动漫制作技术和动漫设计
  • 在农村开个网站要多少钱网站客户运营
  • 免费做文字图网站企业所得税计算方式
  • 做网站要有策划么设计师专用网站
  • 站长之家是什么哈尔滨模板建站服务商
  • 自己做网站需要备案么关键词seo资源
  • 用tornado做网站网站建设素材库
  • dedecms织梦古典艺术书画书法公司企业网站源码模板wordpress 优酷插件
  • 深圳购物网站建设301跳转wordpress
  • 如何做自己的加盟网站开发高端客户
  • 沈阳网站建设哪里好wordpress模块管理系统
  • 跨境外贸平台有哪些天津百度快速排名优化
  • 网站建设需要了解哪些方面企业的网站建设与设计论文
  • 网站建设市场分析内蒙古企业网站建设
  • 广州 网站建设公司不用代码做网站的软件
  • 本地php网站搭建wordpress前台注册登入
  • 网站做推广页需要什么软件下载豪禾创意海报设计理念
  • 河北特定网站建设推荐网站建设的技术可行性
  • 招投标 网站建设哈尔滨做网站哪好
  • 骏域网站建设专家东莞展台展馆设计搭建
  • 免费的html网站东丽手机网站建设
  • 网站建设谈客户说什么广州网站快速制作
  • 寻花问柳专注做男人喜爱的网站做网站教程 第一课
  • 个人做外贸接订单网站简道云crm
  • 小程序免费制作平台教学东莞seo关键词
  • 微网站设计平台网络营销相关的岗位有哪些
  • 手机网站建设软件有哪些内容如何做自己的加盟网站