前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >eXtremeDB XML[通俗易懂]

eXtremeDB XML[通俗易懂]

作者头像
全栈程序员站长
发布2022-11-19 13:26:00
1630
发布2022-11-19 13:26:00
举报

大家好,又见面了,我是你们的朋友全栈君。 For C/C++ applications the eXtremeDB schema compiler option “–x” causes mcocomp to generate interface functions to retrieve, create and replace (update) the contents of an object with the content of an XML string. In addition to the common use of XML interfaces for porting data, these XML interface functions can be used, for instance, in concert with the eXtremeDB event notifications, to cause live data to be shared between eXtremeDB and other systems when an object of interest changes in the database. The XML interfaces can also be used to facilitate simple schema evolution by exporting the database to XML, adding/dropping fields, indexes, and classes, and importing the saved XML into the new database. XML export and import The XML export and import functions are used in conjunction with user-defined file I/O helper functions to stream eXtremeDB database contents to and from persistent media files: MCO_RET mco_db_xml_export(mco_trans_h t, void* stream_handle, mco_stream_write output_stream_writer); MCO_RET mco_db_xml_import(mco_trans_h t, void* stream_handle, mco_stream_read input_stream_reader); When mco_db_xml_export() is called the internal runtime implementation calls the user-defined handler output_stream_writer to manage the output stream. And likewise mco_db_xml_import() causes the handler input_stream_reader to be called. Simple file I/O handlers look like the following: mco_size_sig_t file_writer(void* stream_handle /* FILE* */, const void* from, mco_size_t nbytes) { return (mco_size_t) fwrite(from, 1, nbytes, (FILE*) stream_handle); } mco_size_sig_t file_reader(void* stream_handle /* FILE* */, void* to, mco_size_t max_nbytes) { return (mco_size_t) fread(to, 1, max_nbytes, (FILE*) stream_handle); } Chapter 13 : eXtremeDB XML Interfaces 264 eXtremeDB User’s Guide Function mco_db_xml_export() may be called within a READ_ONLY transaction but, as expected, mco_db_xml_import() must be called within a READ_WRITE transaction. When importing data into an existing database, new data will be added into the database and no existing data will be lost. mco_db_xml_import()calls the internal function mco_w_xml_create_object() to create a new object in the database for each object loaded from the XML stream. Since the import procedure runs in the context of single transaction, there are only two possible results: either the whole data set will be imported successfully or no data will be imported. For example, if an object being imported creates a duplicate for any unique index, the entire transaction will be rolled back. It is necessary to explain how eXtremeDB handles unique identifiers, i.e. fields of the types oid, autoid and autooid. As explained above, the import procedure only creates new objects and never updates existing objects. So if a class contains an oid field, the oid value from the XML stream is used in the newly created object. Care must be taken to assure that imported oid values do not duplicate values in existing database objects. In the case of “automatic id” fields of type autoid and autooid, the import procedure behaves according to the current XML policy settings. The policy switches ignore_autoid and ignore_autooid, when set to value MCO_YES, cause the procedure to ignore values for fields of this type in the XML stream and mco_w_xml_create_object() will generate the id values for the newly created objects just as if they were created by calling the classname_new() function. The default setting of the XML policy is MCO_YES for both switches as the safest

setting to preserve database integrity

Policies:

typedef struct mco_xml_policy_t_ { MCO_NUM_BASE int_base; MCO_NUM_BASE quad_base; MCO_TEXT_CODING text_coding; MCO_TEXT_CODING blob_coding; MCO_FLOAT_FORMAT float_format; mco_bool indent; mco_bool ignore_field; /* ignore field in xml that is not in * class */ mco_bool encode_spec; /* encode chars with code < 32, except LF */ mco_bool encode_lf; /* encode line feeds */ mco_bool encode_nat; /* encode national chars (code > 127) */ mco_bool truncate_sp; /* truncate trailing spaces in chars */ mco_bool use_xml_attrs; /* alternative XML representation, using */ /* attributes */ mco_bool ignore_autoid; /* ignore autoid value in create operations */ mco_bool ignore_autooid; /* ignore auto_oid in create operations */ } mco_xml_policy_t;

The policy default values are set as follows: static mco_xml_policy_t default_xml_policy = { MCO_NUM_DEC, /* int_base is decimal */ MCO_NUM_HEX, /* quad_base is hexadecimal */ MCO_TEXT_ASCII, /* text_coding (strings) are ASCII */ MCO_TEXT_BASE64, /* blob_coding is Base64 */ MCO_FLOAT_EXPONENT, /* float_format is exponential */ MCO_YES, /* text is indented */ MCO_NO, /* all fields must be present in */ /* the incoming XML */ MCO_YES, /* encode special chars (< 32) */ MCO_YES, /* encode line feeds */ MCO_NO, /* encode national chars (> 127) */ MCO_YES /* truncate trailing spaces */ MCO_NO, /* don’t use attributes */ MCO_YES, /* ignore autoid values in input */ MCO_YES /* ignore autooid values in input */ };

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182063.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年10月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档