syscdr.sql 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942
  1. --
  2. --
  3. -- Licensed Materials - Property of IBM and/or HCL
  4. --
  5. -- IBM Informix Dynamic Server
  6. -- Copyright IBM Corporation 1996, 2013
  7. -- (c) Copyright HCL Technologies Ltd. 2017. All Rights Reserved.
  8. --
  9. -- Title: syscdr.sql
  10. --
  11. -- N.B. - all commands should be in lowercase only
  12. --
  13. set lock mode to wait;
  14. database syscdr;
  15. grant connect to public;
  16. grant dba to root;
  17. { Define any UDRs now }
  18. create function informix.timet_to_datetime(informix.integer)
  19. returns datetime year to second
  20. external name '(cdrcmd_timet2datetime)'
  21. language C not variant;
  22. { ************************************************************************ }
  23. { Implementation of ifmx_er_extfile }
  24. { ************************************************************************ }
  25. create opaque type informix.ifmx_er_extfile (
  26. internallength = variable,
  27. maxlen=8000,
  28. alignment = 4);
  29. { Constructors }
  30. create function informix.ifmx_er_extfile(informix.integer, informix.lvarchar)
  31. returns ifmx_er_extfile with (handlesnulls )
  32. external name '(ifmx_er_extfile_in1)'
  33. language C Variant;
  34. grant execute on function informix.ifmx_er_extfile(informix.integer, informix.lvarchar) to public as informix;
  35. create function informix.ifmx_er_extfile(informix.integer, informix.lvarchar, informix.lvarchar)
  36. returns ifmx_er_extfile with (handlesnulls )
  37. external name '(ifmx_er_extfile_in2)'
  38. language C Variant;
  39. grant execute on function informix.ifmx_er_extfile(informix.integer, informix.lvarchar, informix.lvarchar)
  40. to public as informix;
  41. { lvarchar casts to/from ifmx_er_extfile UDT }
  42. create function informix.ifmx_er_extfile_out(informix.ifmx_er_extfile)
  43. returns lvarchar with ( handlesnulls )
  44. external name '(ifmx_er_extfile_out)'
  45. language C Variant;
  46. grant execute on function informix.ifmx_er_extfile_out(informix.ifmx_er_extfile)
  47. to public as informix;
  48. create implicit cast (informix.ifmx_er_extfile as informix.lvarchar with informix.ifmx_er_extfile_out );
  49. { ER stream write UDRs for ifmx_er_extfile UDT }
  50. create function informix.streamwrite(informix.stream, informix.ifmx_er_extfile)
  51. returns integer
  52. external name '(ifmx_er_extfile_StreamWrite)'
  53. language C
  54. not variant;
  55. create function informix.streamread(informix.stream, OUT informix.ifmx_er_extfile)
  56. returns integer
  57. external name '(ifmx_er_extfile_StreamRead)'
  58. language C
  59. not variant;
  60. { Other UDRS for ifmx_er_extfile UDT }
  61. create function informix.compare(informix.ifmx_er_extfile, informix.ifmx_er_extfile)
  62. returns integer
  63. external name '(ifmx_er_extfile_compare)'
  64. language C
  65. not variant;
  66. grant execute on function informix.compare(informix.ifmx_er_extfile, informix.ifmx_er_extfile)
  67. to public as informix;
  68. create function informix.is_applied(informix.ifmx_er_extfile)
  69. returns boolean
  70. external name '(ifmx_er_extfile_is_applied)'
  71. language C
  72. not variant;
  73. grant execute on function informix.is_applied(informix.ifmx_er_extfile)
  74. to public as informix;
  75. create function informix.get_flags(informix.ifmx_er_extfile)
  76. returns integer
  77. external name '(ifmx_er_extfile_get_flags)'
  78. language C
  79. not variant;
  80. grant execute on function informix.get_flags(informix.ifmx_er_extfile)
  81. to public as informix;
  82. create function informix.get_gridid(informix.ifmx_er_extfile)
  83. returns integer
  84. external name '(ifmx_er_extfile_get_gridid)'
  85. language C
  86. not variant;
  87. create function informix.get_error(informix.ifmx_er_extfile)
  88. returns integer
  89. external name '(ifmx_er_extfile_get_error)'
  90. language C
  91. not variant;
  92. grant execute on function informix.get_error(informix.ifmx_er_extfile)
  93. to public as informix;
  94. { Enterprise Replication servers (like SQLHOSTS) }
  95. create table informix.hostdef_tab (
  96. servid integer not null check (servid != 0),
  97. { id equivalent to SQLHOSTS }
  98. name varchar(255) not null, { name }
  99. groupname lvarchar not null { group name }
  100. ) lock mode row;
  101. create unique index informix.host_idix on informix.hostdef_tab (servid) in table;
  102. create unique index informix.host_namix on informix.hostdef_tab (name) in table;
  103. alter table informix.hostdef_tab add constraint primary key (servid);
  104. revoke all on informix.hostdef_tab from public as informix;
  105. grant select on informix.hostdef_tab to public as informix;
  106. { server protocol information }
  107. create table informix.protodef_tab (
  108. servid integer not null, { server id }
  109. protocol varchar(36) not null, { protocol to use }
  110. address varchar(255) not null { server address (url) }
  111. ) lock mode row;
  112. create unique index informix.proto_servproto on informix.protodef_tab (servid,protocol) in table;
  113. create unique index informix.proto_protoaddr on informix.protodef_tab (protocol,address) in table;
  114. create index informix.proto_idix on informix.protodef_tab(servid) in table;
  115. alter table informix.protodef_tab add constraint primary key(servid, protocol);
  116. alter table informix.protodef_tab add constraint
  117. foreign key(servid) references informix.hostdef_tab(servid) on delete cascade;
  118. revoke all on informix.protodef_tab from public as informix;
  119. grant select on informix.protodef_tab to public as informix;
  120. { Enterprise replication server definition }
  121. create table informix.servdef_tab (
  122. servid integer, { SQL host id }
  123. servstate smallint, { state: active, suspend, ... }
  124. idletimeout integer, { connection idle timeout }
  125. atsdir char(512), { abort transaction directory }
  126. risdir char(512), { row spool directory }
  127. flags integer, { API specfic flags }
  128. create_time integer, { time of creation }
  129. modify_time integer { time of last change }
  130. ) lock mode row;
  131. create unique index informix.sdef_idix on informix.servdef_tab(servid) in table;
  132. alter table informix.servdef_tab add constraint primary key(servid);
  133. alter table informix.servdef_tab add constraint foreign key(servid)
  134. references informix.hostdef_tab(servid);
  135. revoke all on informix.servdef_tab from public as informix;
  136. grant select on informix.servdef_tab to public as informix;
  137. { replicate definition }
  138. create table informix.repdef_tab (
  139. repid integer, { replicate key }
  140. primaryrepid integer, { primary repid for shadow replicates }
  141. dsid integer, { DataSync ID for shadow replicates }
  142. replsetid integer, { exclusive replset }
  143. repstate smallint, { active, suspend, ... }
  144. flags integer, { API specfic flags }
  145. repname char(256), { replicate name }
  146. cr_primary char(1), { primary conflict resolution method }
  147. cr_secondary char(1), { secondary conflict resolution method }
  148. cr_spopt char(1), { optimized option }
  149. cr_spname char(256), { conflict resolution stored procedure }
  150. freqtype char(1), { time based frequency }
  151. create_time integer, { time of creation }
  152. modify_time integer, { time of last change }
  153. susp_time integer { time of last suspend }
  154. ) lock mode row;
  155. create unique index informix.repdef_idix on informix.repdef_tab (repid) in table;
  156. create unique index informix.repdef_namix on informix.repdef_tab (repname) in table;
  157. create index informix.repdef_pridx on informix.repdef_tab (primaryrepid) in table;
  158. alter table informix.repdef_tab add constraint primary key(repid);
  159. revoke all on informix.repdef_tab from public as informix;
  160. grant select on informix.repdef_tab to public as informix;
  161. { extended replicate attributes }
  162. create table informix.repxtdattr (
  163. repid integer, { replicate key }
  164. xtd_attr1 integer, { extended attributes }
  165. xtd_attr2 integer,
  166. xtd_attr3 integer,
  167. xtd_attr4 integer ) lock mode row;
  168. create unique index informix.repxtd_idx on informix.repxtdattr (repid) in table;
  169. alter table informix.repxtdattr add constraint primary key (repid);
  170. revoke all on informix.repxtdattr from public as informix;
  171. grant select on informix.repxtdattr to public as informix;
  172. { replicate columns }
  173. create table informix.repl_keys_tab (
  174. repid integer,
  175. order_num integer,
  176. col_name varchar(255)
  177. ) lock mode row;
  178. create unique index informix.repkeyidx on informix.repl_keys_tab (repid, order_num) in table;
  179. alter table informix.repl_keys_tab add constraint foreign key(repid) references
  180. informix.repdef_tab (repid) on delete cascade;
  181. revoke all on informix.repl_keys_tab from public as informix;
  182. grant select on informix.repl_keys_tab to public as informix;
  183. { timestamp check definition }
  184. create table informix.check_timestamp (
  185. repname char(256), { shadow replicate name }
  186. repid integer, { shadow replicate id }
  187. node integer, { node being checked }
  188. flags integer { state }
  189. ) lock mode row;
  190. alter table informix.check_timestamp add constraint primary key (repname, node);
  191. revoke all on informix.check_timestamp from public as informix;
  192. grant select on informix.check_timestamp to public as informix;
  193. { er trigger definition }
  194. create table informix.triggerdef_tab (
  195. triggerid serial, { trigger key - local per server }
  196. repid integer, { replicate id for the trigger }
  197. spname varchar(255), { sp name for the trigger }
  198. flags integer { trigger flags }
  199. ) lock mode row;
  200. create unique index informix.triggerdef_idx1 on informix.triggerdef_tab (repid, spname) in table;
  201. create unique index informix.triggerdef_idx2 on informix.triggerdef_tab (triggerid) in table;
  202. alter table informix.triggerdef_tab add constraint primary key(triggerid);
  203. revoke all on informix.triggerdef_tab from public as informix;
  204. grant select on informix.triggerdef_tab to public as informix;
  205. { er trigger columns }
  206. create table informix.triggercol_tab (
  207. triggerid integer, { trigger key }
  208. colnum integer, { column order }
  209. col lvarchar { column name }
  210. ) lock mode row;
  211. create unique index informix.triggercol_idx1 on informix.triggercol_tab (triggerid, colnum)
  212. in table;
  213. alter table informix.triggercol_tab add constraint primary key (triggerid, colnum);
  214. revoke all on informix.triggercol_tab from public as informix;
  215. grant select on informix.triggercol_tab to public as informix;
  216. { participant in replicate }
  217. create table informix.partdef_tab (
  218. repid integer, { replicate key }
  219. servid integer, { server key }
  220. partnum integer, { partition id for table }
  221. partstate smallint, { particpant state }
  222. partmode char(1), { Primary|Readonly }
  223. flags integer, { use table owner }
  224. start_time integer, { last start time }
  225. stop_time integer, { last stop time }
  226. db char(256), { database name }
  227. owner char(64), { owner name }
  228. table char(256), { table name }
  229. selecstmt lvarchar(30000) { select statement }
  230. ) lock mode row;
  231. create unique index informix.pdef_ridsid on informix.partdef_tab (repid, servid) in table;
  232. create index pdef_sid on informix.partdef_tab(servid) in table;
  233. create index pdef_rid on informix.partdef_tab(repid) in table;
  234. alter table informix.partdef_tab add constraint primary key(repid,servid);
  235. alter table informix.partdef_tab add constraint foreign key(servid) references
  236. informix.servdef_tab (servid) on delete cascade;
  237. alter table informix.partdef_tab add constraint foreign key(repid) references
  238. informix.repdef_tab (repid) on delete cascade;
  239. revoke all on informix.partdef_tab from public as informix;
  240. grant select on informix.partdef_tab to public as informix;
  241. { The following are used for the Templates }
  242. { Template Description }
  243. create sequence informix.cdrSequence cycle;
  244. revoke all on informix.cdrSequence from public as informix;
  245. grant select on informix.cdrSequence to public as informix;
  246. { The following are used for the Mastered Replicate }
  247. { Master Replicate Description }
  248. create table informix.mastered_replicates_tab (
  249. replid integer, { replicate key }
  250. flags integer, { table flags }
  251. tabserver lvarchar, { master server }
  252. tabdb lvarchar, { master database }
  253. tabowner lvarchar, { table owner }
  254. tabname lvarchar { table name }
  255. ) lock mode row;
  256. create unique index informix.mst_replidx1
  257. on informix.mastered_replicates_tab (replid) in table;
  258. revoke all on informix.mastered_replicates_tab from public as informix;
  259. grant select on informix.mastered_replicates_tab to public as informix;
  260. create table informix.mastered_syscolumns_tab (
  261. replid integer, { replicate key }
  262. selectnum smallint, { order of selection }
  263. name lvarchar, { name of column }
  264. pknum smallint, { order within primary key }
  265. coltype smallint, { field type }
  266. collength smallint, { column length }
  267. extended_id integer, { extended id of column }
  268. offset smallint, { offset in row }
  269. isdropped char(1) { 'y' if column has been dropped }
  270. ) lock mode row;
  271. create unique index informix.mst_syscolidx1
  272. on informix.mastered_syscolumns_tab (replid, selectnum) in table;
  273. revoke all on informix.mastered_syscolumns_tab from public as informix;
  274. grant select on informix.mastered_syscolumns_tab to public as informix;
  275. { Master Extended Types }
  276. create table informix.mastered_sysxtdtypes_tab (
  277. replid integer, { replicate key }
  278. extended_id integer, { extended id }
  279. mode char(1), { mode }
  280. name lvarchar, { name of extended type }
  281. type smallint, { type of extended type }
  282. align smallint, { alignment of extended type }
  283. source integer, { source type of extended type }
  284. maxlen integer, { max length of extended type }
  285. length integer { length of extended type }
  286. ) lock mode row;
  287. create unique index informix.mst_sysxtdidx1
  288. on informix.mastered_sysxtdtypes_tab (replid, extended_id) in table;
  289. revoke all on informix.mastered_sysxtdtypes_tab from public as informix;
  290. grant select on informix.mastered_sysxtdtypes_tab to public as informix;
  291. { Attributes for extended types }
  292. create table informix.mastered_sysattr_tab (
  293. replid integer, { replicate }
  294. extended_id integer, { Extended id of this attribute }
  295. seqno smallint, { Seq number of the attribute }
  296. levelno smallint, { nesting of this entry }
  297. fieldno smallint, { field number of entry }
  298. fieldname lvarchar, { Name of this entry }
  299. type smallint, { type of field }
  300. length smallint, { Length of field }
  301. xtd_type_id integer { extended type of field }
  302. ) lock mode row;
  303. create unique index informix.mst_sysattridx1
  304. on informix.mastered_sysattr_tab (replid, extended_id, seqno) in table;
  305. revoke all on informix.mastered_sysattr_tab from public as informix;
  306. grant select on informix.mastered_sysattr_tab to public as informix;
  307. { Resync job definition table }
  308. create table informix.rsncjobdef_tab (
  309. rsncjobid serial, { job identifier }
  310. rsncjobname char(256), { job name }
  311. flags integer, { job specific flags }
  312. srcservid integer, { source of the job }
  313. srcfilter lvarchar, { optional where clause on source }
  314. tgtservid integer, { target server for the job }
  315. tgtfilter lvarchar, { optional where clause on target }
  316. repid integer, { replicate on which the job is defined }
  317. replsetid integer, { replset on which the job is defined }
  318. replsetjobid integer, { replsetjoid if this job is on a replset }
  319. blocksize integer, { number of rows per resynch block }
  320. ctrltabname char(256), { resync control table }
  321. ctrltabrepid integer, { replicate for the resync control table }
  322. acktabname char(256), { resync acknowledgements table }
  323. acktabrepid integer, { replicate for the acks table }
  324. progtabname char(256), { resync progress table }
  325. progtabrepid integer, { replicate for the rsnc progress table }
  326. shadowrepid integer, { shadow replicate on the table being synced }
  327. rsncjobstate integer, { current state of the job }
  328. totalrowcount int8, { total #of rows processed }
  329. sqlerror integer, { sql error if the job aborted }
  330. isamerror integer, { sql error if the job aborted }
  331. cdrerror integer, { cdr error if the job aborted }
  332. tgtsqlerror integer, { target sql error if the job aborted }
  333. tgtisamerror integer, { target sql error if the job aborted }
  334. tgtcdrerror integer, { target cdr error if the job aborted }
  335. start_time datetime year to second, { current state of the job }
  336. end_time datetime year to second { current state of the job }
  337. ) lock mode row;
  338. create unique index informix.rsncjobdef_namix on informix.rsncjobdef_tab (rsncjobname) in table;
  339. create unique index informix.rsncjobdef_srcservidx
  340. on informix.rsncjobdef_tab (rsncjobid, srcservid) in table;
  341. alter table informix.rsncjobdef_tab add constraint primary key(rsncjobid, srcservid);
  342. revoke all on informix.rsncjobdef_tab from public as informix;
  343. grant select on informix.rsncjobdef_tab to public as informix;
  344. { Resync job dependecies }
  345. create table informix.rsncjobdeps (
  346. rsncjobid integer,
  347. srcservid integer,
  348. parentjobid integer
  349. ) lock mode row;
  350. create index informix.rsncjobdeps_srcservidx
  351. on informix.rsncjobdeps (rsncjobid,srcservid) in table;
  352. alter table informix.rsncjobdeps add constraint foreign key(rsncjobid,srcservid)
  353. references informix.rsncjobdef_tab(rsncjobid,srcservid) on delete cascade;
  354. revoke all on informix.rsncjobdeps from public as informix;
  355. grant select on informix.rsncjobdeps to public as informix;
  356. { Resync procedure names }
  357. create table informix.rsncprocnames_tab (
  358. rsncjobid integer, { job identifier }
  359. srcservid integer, { source for this job }
  360. db char(256), { db in which proc is created }
  361. procname char(256) { rsnc procedure name }
  362. ) lock mode row;
  363. create index informix.rsncprocnames_idix on informix.rsncprocnames_tab (rsncjobid,
  364. srcservid) in table;
  365. alter table informix.rsncprocnames_tab add constraint foreign key(rsncjobid,srcservid)
  366. references informix.rsncjobdef_tab(rsncjobid,srcservid) on delete cascade;
  367. revoke all on informix.rsncprocnames_tab from public as informix;
  368. grant select on informix.rsncprocnames_tab to public as informix;
  369. { Deleted Replicate Table }
  370. create table informix.delrepl (
  371. repid integer, { replicate key }
  372. deltime integer { time replicate deleted }
  373. ) lock mode row;
  374. { replset definitions }
  375. create table informix.replsetdef_tab (
  376. replsetid integer, { replset key }
  377. replsetattr integer, { replset flags }
  378. replsetstate integer, { only for exclusive replsets }
  379. replsetname char(256), { replset name }
  380. freqtype char(1), { time based frequency }
  381. susp_time integer,
  382. create_time integer, { time of creation }
  383. modify_time integer { time of last change }
  384. ) lock mode row;
  385. create unique index informix.rsdef_idix on informix.replsetdef_tab(replsetid) in table;
  386. create unique index informix.rsdef_namix on informix.replsetdef_tab(replsetname) in table;
  387. alter table informix.replsetdef_tab add constraint primary key(replsetid);
  388. revoke all on informix.replsetdef_tab from public as informix;
  389. grant select on informix.replsetdef_tab to public as informix;
  390. { replicates in replsets }
  391. create table informix.replsetpartdef (
  392. replsetid integer, { replset key }
  393. repid integer { replicate key }
  394. ) lock mode row;
  395. create unique index informix.rspdef_rsidrid on informix.replsetpartdef(replsetid,repid) in table;
  396. create index informix.rspdef_rsid on informix.replsetpartdef (replsetid) in table;
  397. create index informix.rspdef_rid on informix.replsetpartdef (repid) in table;
  398. alter table informix.replsetpartdef add constraint primary key(replsetid, repid);
  399. alter table informix.replsetpartdef add constraint foreign key(replsetid) references
  400. informix.replsetdef_tab(replsetid) on delete cascade;
  401. alter table informix.replsetpartdef add constraint foreign key(repid) references
  402. informix.repdef_tab (repid) on delete cascade;
  403. revoke all on informix.replsetpartdef from public as informix;
  404. grant select on informix.replsetpartdef to public as informix;
  405. { replicate token to replicate id mapping }
  406. create table informix.ts_repltoken (
  407. tokenid integer, { token id }
  408. repid integer { replicate id }
  409. ) lock mode row;
  410. create unique index informix.ts_repltoken_uidx on informix.ts_repltoken (tokenid,repid) in table;
  411. create index informix.ts_repltoken_idx on informix.ts_repltoken (tokenid) in table;
  412. create index informix.ts_repltoken_repid on informix.ts_repltoken (repid) in table;
  413. revoke all on informix.ts_repltoken from public as informix;
  414. grant select on informix.ts_repltoken to public as informix;
  415. { replicate token update requests }
  416. create table informix.ts_repltokenupd (
  417. pkhash integer, { primary key hash }
  418. tokenid integer, { token id }
  419. rsplogid integer, { tx begin logid }
  420. rsplogpos integer, { tx begin lopos }
  421. logid integer, { dml logid mod compression }
  422. logpos integer, { dml logpos mod compression }
  423. updlen integer, { length of updstmt }
  424. dbname char(256), { database name }
  425. updstmt lvarchar(32400) { update statement }
  426. ) lock mode row;
  427. create index informix.ts_repltokenupd_lsnidx on
  428. informix.ts_repltokenupd (logid,logpos) in table;
  429. revoke all on informix.ts_repltokenupd from public as informix;
  430. { no select permission to public }
  431. { server routing table }
  432. create table informix.servroute (
  433. serverid integer,
  434. parentServ integer,
  435. serverflags smallint
  436. ) lock mode row;
  437. create unique index informix.servroute_idix on informix.servroute(serverid) in table;
  438. create index informix.servroute_paridix on informix.servroute (parentServ) in table;
  439. alter table informix.servroute add constraint primary key(serverid);
  440. alter table informix.servroute add constraint foreign key(serverid) references
  441. informix.servdef_tab (servid) on delete cascade;
  442. revoke all on informix.servroute from public as informix;
  443. grant select on informix.servroute to public as informix;
  444. { error log }
  445. create table informix.cdr_errors (
  446. local_seqnum serial,
  447. remote_seqnum integer,
  448. error_number integer,
  449. timestamp datetime year to second,
  450. source_id integer,
  451. ctrl_id integer,
  452. errreviewed char(1),
  453. error_desc text
  454. ) lock mode row;
  455. create unique index informix.cdrerr_lseqix on informix.cdr_errors(local_seqnum) in table;
  456. alter table informix.cdr_errors add constraint primary key(local_seqnum);
  457. revoke all on informix.cdr_errors from public as informix;
  458. grant select on informix.cdr_errors to public as informix;
  459. { global catalog version }
  460. create table informix.gcversion (verstamp decimal);
  461. { Note: Keep this in sync with syscheckcdr() in sysmaster.sql }
  462. insert into informix.gcversion values (9);
  463. revoke all on informix.gcversion from public as informix;
  464. grant select on informix.gcversion to public as informix;
  465. { swap log position table }
  466. create table informix.swaploginfo (
  467. repid int,
  468. swap1_llid int,
  469. swap1_llpos int,
  470. swap2_llid int,
  471. swap2_llpos int
  472. ) lock mode row;
  473. create unique index informix.swaploginfo_idx1 on informix.swaploginfo (repid) in table;
  474. revoke all on informix.swaploginfo from public as informix;
  475. grant select on informix.swaploginfo to public as informix;
  476. { Shadow replicate event table }
  477. create table informix.shadow_event_info (
  478. repid int,
  479. servid int,
  480. event_logged int default 0,
  481. event_received int default 0
  482. ) lock mode row;
  483. create index informix.shadow_event_info_idx1 on informix.shadow_event_info (repid) in table;
  484. create index informix.shadow_event_info_idx2 on informix.shadow_event_info (repid,servid) in table;
  485. revoke all on informix.shadow_event_info from public as informix;
  486. grant select on informix.shadow_event_info to public as informix;
  487. { replay position table }
  488. create table informix.replaytab (
  489. llid int,
  490. llpos int,
  491. cntrlkey1 int,
  492. cntrlkey2 int,
  493. gridid int,
  494. gridpos int);
  495. revoke all on informix.replaytab from public as informix;
  496. { receive control messages duplicate detection }
  497. create table informix.recvcntldup (
  498. servid integer,
  499. qrkey1 integer,
  500. qrkey2 integer,
  501. qrkey3 integer,
  502. qrkey4 integer,
  503. committime integer,
  504. localtime integer ) lock mode row;
  505. revoke all on informix.recvcntldup from public as informix;
  506. create unique index informix.recvcntldupix on informix.recvcntldup(servid) in table;
  507. { cdr catalog state }
  508. create table informix.cdrstatedef_tab (
  509. state integer, { state of cdr }
  510. hdrpriname char(256), { hdrprimary name }
  511. maxseqnum integer { maximum sequence num to generate repid/replsetid }
  512. );
  513. revoke all on informix.cdrstatedef_tab from public as informix;
  514. grant select on informix.cdrstatedef_tab to public as informix;
  515. { active delete table definitions }
  516. create table informix.deltabdef_tab (
  517. tabname char(256), { replicate table name }
  518. owner char(64), { replicate table owner }
  519. deltabid serial, { unique id }
  520. dbname char(256) { database name }
  521. ) lock mode row;
  522. create unique index informix.deltab_idix on informix.deltabdef_tab (deltabid) in table;
  523. alter table informix.deltabdef_tab add constraint primary key(deltabid);
  524. revoke all on informix.deltabdef_tab from public as informix;
  525. grant select on informix.deltabdef_tab to public as informix;
  526. { cdr violations table definitions }
  527. create table informix.cdrviotabdef_tab (
  528. tabname char(256), { replicate table name }
  529. owner char(64), { replicate table owner }
  530. viotabid serial, { unique id }
  531. dbname char(256) { database name }
  532. ) lock mode row;
  533. create unique index informix.cdrviotab_idix on informix.cdrviotabdef_tab (viotabid) in table;
  534. alter table informix.cdrviotabdef_tab add constraint primary key(viotabid);
  535. revoke all on informix.cdrviotabdef_tab from public as informix;
  536. grant select on informix.cdrviotabdef_tab to public as informix;
  537. { delete table to replicate mapping }
  538. create table informix.deltabrep (
  539. deltabid integer,
  540. repid integer
  541. ) lock mode row;
  542. create index informix.deltabrep_didix on informix.deltabrep(deltabid) in table;
  543. create index informix.deltabrep_ridix on informix.deltabrep(repid) in table;
  544. alter table informix.deltabrep add constraint foreign key(deltabid) references
  545. informix.deltabdef_tab(deltabid) on delete cascade;
  546. alter table informix.deltabrep add constraint foreign key(repid) references
  547. informix.repdef_tab(repid) on delete cascade;
  548. revoke all on informix.deltabrep from public as informix;
  549. grant select on informix.deltabrep to public as informix;
  550. { time based replication frequency information }
  551. create table informix.freqdef (
  552. repid integer,
  553. objtype char(1), { Replicate or rSet??? }
  554. hour smallint,
  555. min smallint,
  556. day smallint,
  557. lastexec integer { time when run }
  558. ) lock mode row;
  559. create index informix.freqdef_ridix on informix.freqdef(repid) in table;
  560. revoke all on informix.freqdef from public as informix;
  561. grant select on informix.freqdef to public as informix;
  562. { For tracking the row counts for resync jobs }
  563. create table informix.rsncrowstats (
  564. srcservid integer,
  565. rsncjobid integer,
  566. sequence integer,
  567. rsncrowcnt integer
  568. ) lock mode row;
  569. create index informix.rsncrow_idix
  570. on informix.rsncrowstats(srcservid,rsncjobid,sequence) in table;
  571. create index informix.rsncrow_srcservidx
  572. on informix.rsncrowstats(rsncjobid,srcservid) in table;
  573. alter table informix.rsncrowstats add constraint foreign key(rsncjobid,srcservid)
  574. references informix.rsncjobdef_tab(rsncjobid,srcservid) on delete cascade;
  575. revoke all on informix.rsncrowstats from public as informix;
  576. grant select on informix.rsncrowstats to public as informix;
  577. { Replicate suspend/resume events }
  578. create table informix.replevents (
  579. repid integer,
  580. eventtime integer,
  581. event integer) lock mode row;
  582. revoke all on informix.replevents from public as informix;
  583. grant select on informix.replevents to public as informix;
  584. { PostCommit Trigger Progress Table }
  585. create table informix.cdr_pcpt (
  586. logid integer,
  587. logpos integer) lock mode row;
  588. revoke all on informix.cdr_pcpt from public as informix;
  589. grant select on informix.cdr_pcpt to public as informix;
  590. { PostCommit DDL log Progress Table }
  591. create table informix.cdrddlpt (
  592. pttype char(1),
  593. logid integer,
  594. logpos integer,
  595. seq integer) lock mode row;
  596. create index informix.cdrddlpt_idix
  597. on informix.cdrddlpt(pttype) in table;
  598. revoke all on informix.cdrddlpt from public as informix;
  599. grant select on informix.cdrddlpt to public as informix;
  600. insert into informix.cdrddlpt values ('S',0,0,0);
  601. insert into informix.cdrddlpt values ('A',0,0,0);
  602. create table informix.replcheck_stat_tab (
  603. replcheck_id serial primary key,
  604. replcheck_name varchar(255),
  605. replcheck_replname varchar(255),
  606. replcheck_type char(1),
  607. replcheck_scope char(1),
  608. replcheck_numrows integer,
  609. replcheck_rows_processed integer,
  610. replcheck_status char(1),
  611. replcheck_start_time datetime year to second,
  612. replcheck_end_time datetime year to second
  613. ) lock mode row;
  614. revoke all on informix.replcheck_stat_tab from public as informix;
  615. grant insert, update, delete, select on informix.replcheck_stat_tab to public as informix;
  616. create index informix.replcheck_name on informix.replcheck_stat_tab (replcheck_name);
  617. create view informix.replcheck_stat (
  618. replcheck_id, replcheck_name, replcheck_replname, replcheck_type,
  619. replcheck_scope, replcheck_numrows, replcheck_rows_processed,
  620. replcheck_status, replcheck_start_time, replcheck_end_time)
  621. as select
  622. r.replcheck_id, cdrgcdisp(r.replcheck_name),
  623. cdrgcdisp(r.replcheck_replname), r.replcheck_type,
  624. r.replcheck_scope, r.replcheck_numrows,
  625. r.replcheck_rows_processed, r.replcheck_status,
  626. r.replcheck_start_time, r.replcheck_end_time
  627. from informix.replcheck_stat_tab r;
  628. revoke all on informix.replcheck_stat from public as informix;
  629. grant select on informix.replcheck_stat to public as informix;
  630. create table informix.replcheck_stat_node_tab (
  631. replnode_replcheck_id integer,
  632. replnode_node_id integer,
  633. replnode_order integer,
  634. replnode_node_name varchar(255),
  635. replnode_table_owner varchar(255),
  636. replnode_table_name varchar(255),
  637. replnode_row_count integer,
  638. replnode_processed_rows integer,
  639. replnode_missing_rows integer,
  640. replnode_extra_rows integer,
  641. replnode_mismatched_rows integer,
  642. replnode_extra_child_rows integer
  643. ) lock mode row;
  644. revoke all on informix.replcheck_stat_node_tab from public as informix;
  645. grant insert, update, delete, select
  646. on informix.replcheck_stat_node_tab to public as informix;
  647. create unique index informix.replnode_id on informix.replcheck_stat_node_tab
  648. ( replnode_replcheck_id, replnode_node_id);
  649. create index informix.replnode_order on informix.replcheck_stat_node_tab
  650. ( replnode_replcheck_id, replnode_order);
  651. alter table informix.replcheck_stat_node_tab add constraint
  652. foreign key (replnode_replcheck_id)
  653. references informix.replcheck_stat_tab(replcheck_id)
  654. on delete cascade;
  655. create view informix.replcheck_stat_node (
  656. replnode_replcheck_id, replnode_id, replnode_order,
  657. replnode_node_name, replnode_table_owner, replnode_table_name,
  658. replnode_row_count, replnode_processed_rows,
  659. replnode_missing_rows, replnode_extra_rows,
  660. replnode_mismatched_rows, replnode_extra_child_rows)
  661. as select
  662. r.replnode_replcheck_id, r.replnode_node_id, r.replnode_order,
  663. cdrgcdisp(r.replnode_node_name), cdrgcdisp(r.replnode_table_owner),
  664. cdrgcdisp(r.replnode_table_name), r.replnode_row_count,
  665. r.replnode_processed_rows, r.replnode_missing_rows,
  666. r.replnode_extra_rows, r.replnode_mismatched_rows,
  667. r.replnode_extra_child_rows
  668. from informix.replcheck_stat_node_tab r;
  669. revoke all on informix.replcheck_stat_node from public as informix;
  670. grant select on informix.replcheck_stat_node to public as informix;
  671. create table informix.replcheck_restart_tab (
  672. replcheck_restart_id serial primary key,
  673. replcheck_restart_type char(1),
  674. replcheck_restart_state char(1),
  675. replcheck_restart_name varchar(255),
  676. replcheck_restart_rc integer,
  677. replcheck_restart_regtime integer,
  678. replcheck_restart_retrytime integer,
  679. replcheck_restart_retryincr integer,
  680. replcheck_restart_retrytimes integer,
  681. replcheck_restart_command lvarchar,
  682. replcheck_restart_object lvarchar,
  683. replcheck_restart_parms lvarchar(10000)
  684. ) lock mode row;
  685. revoke all on informix.replcheck_restart_tab from public as informix;
  686. grant insert, update, delete, select on informix.replcheck_restart_tab to public as informix;
  687. create index informix.replcheck_restart_idx1 on informix.replcheck_restart_tab(
  688. replcheck_restart_state,
  689. replcheck_restart_retrytime);
  690. create index informix.replcheck_restart_idx2 on informix.replcheck_restart_tab(
  691. replcheck_restart_name);
  692. create view informix.replcheck_restart (
  693. replcheck_restart_id, replcheck_restart_type,
  694. replcheck_restart_state, replcheck_restart_name,
  695. replcheck_restart_rc,
  696. replcheck_restart_regtime, replcheck_restart_retrytime,
  697. replcheck_restart_retryincr, replcheck_restart_retrytimes,
  698. replcheck_restart_command, replcheck_restart_parms)
  699. as select
  700. r.replcheck_restart_id,
  701. r.replcheck_restart_type,
  702. r.replcheck_restart_state,
  703. cdrgcdisp(r.replcheck_restart_name),
  704. r.replcheck_restart_rc,
  705. informix.timet_to_datetime(r.replcheck_restart_regtime),
  706. informix.timet_to_datetime(r.replcheck_restart_retrytime),
  707. r.replcheck_restart_retryincr,
  708. r.replcheck_restart_retrytimes,
  709. r.replcheck_restart_command,
  710. r.replcheck_restart_parms
  711. from informix.replcheck_restart_tab r;
  712. revoke all on informix.replcheck_restart from public as informix;
  713. grant select on informix.replcheck_restart to public as informix;
  714. { Stored procedure for setting boolean 'columns' in views for flags values }
  715. create procedure informix.bitval ( bitset int, bitmask int) returning int;
  716. if (bitset < 0) then
  717. if (bitmask < 0) then
  718. return 1;
  719. end if;
  720. let bitset = bitset + 2147483648;
  721. end if;
  722. if (bitset > 1073741824) then
  723. if (bitmask = 1073741824) then
  724. return 1;
  725. end if;
  726. end if
  727. if (mod(bitset,2*bitmask) >= bitmask) then
  728. return 1;
  729. end if
  730. return 0;
  731. end procedure;
  732. grant execute on informix.bitval to public as informix;
  733. { The following views made on syscdr are used convert the internal format }
  734. { of the character data to an external, displayable format. }
  735. create view informix.hostdef(servid, name, groupname)
  736. as select
  737. h.servid,
  738. cdrgcdisp(h.name),
  739. cdrgcdisp(h.groupname)
  740. from informix.hostdef_tab h;
  741. revoke all on informix.hostdef from public as informix;
  742. grant select on informix.hostdef to public as informix;
  743. create view informix.servdef (servid, servstate, idletimeout, atsdir, risdir,
  744. flags, create_time, modify_time)
  745. as select s.servid, s.servstate, s.idletimeout,
  746. cdrgcdisp(s.atsdir), cdrgcdisp(s.risdir), s.flags,
  747. timet_to_datetime(s.create_time), timet_to_datetime(s.modify_time)
  748. from informix.servdef_tab s;
  749. revoke all on informix.servdef from public as informix;
  750. grant select on informix.servdef to public as informix;
  751. create view informix.repdef (repid, primaryrepid, replsetid, repstate, flags,
  752. repname, cr_primary, cr_secondary,
  753. cr_spopt, cr_spname, freqtype,
  754. create_time, modify_time, susp_time)
  755. as select r.repid, r.primaryrepid, r.replsetid, r.repstate, r.flags,
  756. cdrgcdisp(r.repname), r.cr_primary, r.cr_secondary,
  757. r.cr_spopt, cdrgcdisp(r.cr_spname), r.freqtype,
  758. timet_to_datetime(r.create_time),
  759. timet_to_datetime(r.modify_time),
  760. timet_to_datetime(r.susp_time)
  761. from informix.repdef_tab r;
  762. revoke all on informix.repdef from public as informix;
  763. grant select on informix.repdef to public as informix;
  764. create view informix.repl_keys(repid, order_num, col_name)
  765. as select repid, order_num, cdrgcdisp(col_name)
  766. from informix.repl_keys_tab;
  767. revoke all on informix.repl_keys from public as informix;
  768. grant select on informix.repl_keys to public as informix;
  769. create view informix.partdef (repid, servid, partnum, partstate, partmode,
  770. flags, start_time, stop_time, db, owner, table,
  771. selecstmt)
  772. as select p.repid, p.servid, p.partnum, p.partstate, p.partmode,
  773. p.flags, p.start_time, p.stop_time,
  774. cdrgcdisp(p.db), cdrgcdisp(p.owner),
  775. cdrgcdisp(p.table), cdrgcdisp(p.selecstmt)
  776. from informix.partdef_tab p;
  777. revoke all on informix.partdef from public as informix;
  778. grant select on informix.partdef to public as informix;
  779. create view informix.rsncjobdef (rsncjobid, rsncjobname, flags,
  780. srcservid, srcfilter, tgtservid, tgtfilter, repid, replsetid,
  781. replsetjobid, blocksize, ctrltabname, ctrltabrepid,
  782. acktabname, acktabrepid, progtabname, progtabrepid, shadowrepid,
  783. rsncjobstate, totalrowcount, sqlerror, isamerror, cdrerror, tgtsqlerror,
  784. tgtisamerror, tgtcdrerror, start_time, end_time)
  785. as select r.rsncjobid, cdrgcdisp(r.rsncjobname), r.flags,
  786. r.srcservid, cdrgcdisp(r.srcfilter), r.tgtservid, cdrgcdisp(r.tgtfilter),
  787. r.repid, r.replsetid, r.replsetjobid, r.blocksize,
  788. cdrgcdisp(r.ctrltabname), r.ctrltabrepid, cdrgcdisp(r.acktabname),
  789. r.acktabrepid, cdrgcdisp(r.progtabname), r.progtabrepid,
  790. r.shadowrepid, r.rsncjobstate, r.totalrowcount, r.sqlerror,
  791. r.isamerror, r.cdrerror, r.tgtsqlerror, r.tgtisamerror, r.tgtcdrerror,
  792. r.start_time, r.end_time
  793. from informix.rsncjobdef_tab r;
  794. revoke all on informix.rsncjobdef from public as informix;
  795. grant select on informix.rsncjobdef to public as informix;
  796. create view informix.rsncprocnames(rsncjobid, srcservid, db, procname)
  797. as select r.rsncjobid, r.srcservid, cdrgcdisp(r.db), cdrgcdisp(r.procname)
  798. from informix.rsncprocnames_tab r;
  799. revoke all on informix.rsncprocnames from public as informix;
  800. grant select on informix.rsncprocnames to public as informix;
  801. create view informix.replsetdef (replsetid, replsetattr, replsetstate,
  802. replsetname, freqtype, susp_type, create_time, modify_time)
  803. as select r.replsetid, r.replsetattr, r.replsetstate,
  804. cdrgcdisp(r.replsetname), r.freqtype,
  805. timet_to_datetime(r.susp_time),
  806. timet_to_datetime(r.create_time),
  807. timet_to_datetime(r.modify_time)
  808. from informix.replsetdef_tab r;
  809. revoke all on informix.replsetdef from public as informix;
  810. grant select on informix.replsetdef to public as informix;
  811. create view informix.triggerdef (triggerid, repid, spname, flags)
  812. as select t.triggerid, t.repid, cdrgcdisp(t.spname), t.flags
  813. from informix.triggerdef_tab t;
  814. revoke all on informix.triggerdef from public as informix;
  815. grant select on informix.triggerdef to public as informix;
  816. create view informix.triggercol (triggerid, colnum, col)
  817. as select t.triggerid, t.colnum, cdrgcdisp(t.col)
  818. from informix.triggercol_tab t;
  819. revoke all on informix.triggercol from public as informix;
  820. grant select on informix.triggercol to public as informix;
  821. create view informix.deltabdef (tabname, owner, dbname, deltabid)
  822. as select cdrgcdisp(d.tabname), cdrgcdisp(d.owner), cdrgcdisp(d.dbname), d.deltabid
  823. from informix.deltabdef_tab d;
  824. revoke all on informix.deltabdef from public as informix;
  825. grant select on informix.deltabdef to public as informix;
  826. create view informix.cdrviotabdef (tabname, owner, dbname, viotabid)
  827. as select cdrgcdisp(v.tabname), cdrgcdisp(v.owner), cdrgcdisp(v.dbname), v.viotabid
  828. from informix.cdrviotabdef_tab v;
  829. revoke all on informix.cdrviotabdef from public as informix;
  830. grant select on informix.cdrviotabdef to public as informix;
  831. create view informix.cdrstate (state, hdrpriname, maxseqnum)
  832. as select c.state, cdrgcdisp(c.hdrpriname), c.maxseqnum
  833. from informix.cdrstatedef_tab c;
  834. revoke all on informix.cdrstate from public as informix;
  835. grant select on informix.cdrstate to public as informix;
  836. create view informix.mastered_syscolumns
  837. (replid, selectnum, name, pknum, coltype, collength,
  838. extended_id, offset, isdropped)
  839. as select replid, selectnum, cdrgcdisp(name), pknum,
  840. coltype, collength, extended_id, offset, isdropped
  841. from informix.mastered_syscolumns_tab;
  842. revoke all on informix.mastered_syscolumns from public as informix;
  843. grant select on informix.mastered_syscolumns to public as informix;
  844. create view informix.mastered_sysxtdtypes
  845. (replid, extended_id, mode, name, type,
  846. align, source, maxlen, length)
  847. as select replid, extended_id, mode, cdrgcdisp(name),
  848. type, align, source, maxlen, length
  849. from informix.mastered_sysxtdtypes_tab;
  850. revoke all on informix.mastered_sysxtdtypes from public as informix;
  851. grant select on informix.mastered_sysxtdtypes to public as informix;
  852. create view informix.mastered_sysattr
  853. (replid, extended_id, seqno, levelno, fieldno, fieldname,
  854. type, length, xtd_type_id)
  855. as select replid, extended_id, seqno, levelno,
  856. fieldno, cdrgcdisp(fieldname), type, length, xtd_type_id
  857. from informix.mastered_sysattr_tab;
  858. revoke all on informix.mastered_sysattr from public as informix;
  859. grant select on informix.mastered_sysattr to public as informix;
  860. create view informix.mastered_replicates
  861. (replid, flags, tabserver, tabdb, tabowner, tabname)
  862. as select m.replid, m.flags, cdrgcdisp(m.tabserver),
  863. cdrgcdisp(m.tabdb), cdrgcdisp(m.tabowner), cdrgcdisp(m.tabname)
  864. from informix.mastered_replicates_tab m;
  865. revoke all on informix.mastered_replicates from public as informix;
  866. grant select on informix.mastered_replicates to public as informix;
  867. create view informix.templatedef
  868. (replsetid, replsetname)
  869. as select r.replsetid, r.replsetname
  870. from informix.replsetdef r
  871. where informix.bitval(r.replsetattr, 2097152) = 1;
  872. revoke all on informix.templatedef from public as informix;
  873. grant select on informix.templatedef to public as informix;
  874. create view informix.templatetables
  875. (templatename, repname, replid, server, database, owner, table)
  876. as select t.replsetname, r.repname, m.replid, m.tabserver,
  877. m.tabdb, m.tabowner, m.tabname
  878. from informix.templatedef t, outer (replsetpartdef p,
  879. outer (mastered_replicates m, outer repdef r))
  880. where t.replsetid = p.replsetid
  881. and p.repid = m.replid
  882. and m.replid = r.repid;
  883. revoke all on informix.templatetables from public as informix;
  884. grant select on informix.templatetables to public as informix;
  885. create procedure informix.cdrcmd(p1 integer)
  886. define ignoreMe integer;
  887. execute function cdrcmd(p1) into ignoreMe;
  888. end procedure;
  889. create procedure informix.cdrcmd(p1 integer, p2 integer)
  890. define ignoreMe integer;
  891. execute function informix.cdrcmd(p1, p2) into ignoreMe;
  892. end procedure;
  893. create procedure informix.cdrcmd(p1 integer, p2 integer, p3 integer)
  894. define ignoreMe integer;
  895. execute function informix.cdrcmd(p1, p2, p3) into ignoreMe;
  896. end procedure;
  897. create procedure informix.cdrcmd(p1 integer, p2 lvarchar)
  898. define ignoreMe integer;
  899. execute function informix.cdrcmd(p1, p2) into ignoreMe;
  900. end procedure;
  901. create procedure informix.cdrcmdfl(p1 integer)
  902. define ignoreMe float;
  903. execute function informix.cdrcmdfl(p1) into ignoreMe;
  904. end procedure;
  905. create procedure informix.rss2er()
  906. define ignoreMe integer;
  907. execute function informix.cdrcmd(115) into ignoreMe;
  908. end procedure;
  909. { Tables, views for grid based replication }
  910. create sequence informix.gridseq increment by 1 start with 1
  911. nomaxvalue nominvalue nocycle order;
  912. create sequence informix.gridack increment by 1 start with 1
  913. nomaxvalue nominvalue nocycle order;
  914. create sequence informix.gridnack increment by 1 start with 1
  915. nomaxvalue nominvalue nocycle order;
  916. create sequence informix.gridredo increment by 1 start with 1
  917. nomaxvalue nominvalue nocycle order;
  918. create table informix.grid_cdr_node_tab (
  919. gn_id integer, { cdrid }
  920. gn_name varchar(255), { cdrname }
  921. gn_version integer, { grid version }
  922. gn_create_time integer, { time created }
  923. gn_sync_time integer, { time internal repl synced }
  924. gn_node_type char(1), { Root, Nonroot, Leaf }
  925. gn_need_sync char(1), { need sync flag }
  926. gn_sync_by integer { node performing sync }
  927. ) lock mode row;
  928. create unique index informix.grid_cdr_node_idx1 on informix.grid_cdr_node_tab(gn_id);
  929. alter table informix.grid_cdr_node_tab add constraint primary key (gn_id);
  930. revoke all on informix.grid_cdr_node_tab from public as informix;
  931. grant select on informix.grid_cdr_node_tab to public as informix;
  932. create trigger informix.grid_cmd_nodet1 insert on informix.grid_cdr_node_tab
  933. referencing new as newrow
  934. for each row
  935. (execute procedure informix.cdrcmd(111));
  936. create view informix.grid_cdr_node( gn_id, gn_create_time, gn_sync_time,
  937. gn_node_type, gn_need_sync, gn_sync_by)
  938. as select gn_id, informix.timet_to_datetime(gn_create_time),
  939. informix.timet_to_datetime(gn_sync_time),
  940. gn_node_type, gn_need_sync,
  941. gn_sync_by
  942. from informix.grid_cdr_node_tab;
  943. revoke all on informix.grid_cdr_node from public as informix;
  944. grant select on informix.grid_cdr_node to public as informix;
  945. create table informix.grid_def_tab (
  946. gd_name char(256), { grid name }
  947. gd_id integer { grid id - from replset id }
  948. ) lock mode row;
  949. create unique index informix.grid_def_idx1 on informix.grid_def_tab(gd_id);
  950. alter table informix.grid_def_tab add constraint primary key (gd_id);
  951. create unique index informix.grid_def_idx2 on informix.grid_def_tab(gd_name);
  952. alter table informix.grid_def_tab add constraint unique(gd_name);
  953. revoke all on informix.grid_def_tab from public as informix;
  954. grant select on informix.grid_def_tab to public as informix;
  955. create view informix.grid_def(
  956. gd_name, gd_id)
  957. as select
  958. r.gd_name, r.gd_id
  959. from informix.grid_def_tab r;
  960. revoke all on informix.grid_def from public as informix;
  961. grant select on informix.grid_def to public as informix;
  962. create table informix.grid_part_tab (
  963. gp_id integer, { grid id }
  964. gp_servid integer, { servdef servid }
  965. gp_enable char(1) { enable grid commands }
  966. ) lock mode row;
  967. create unique index informix.grid_part_idx1 on informix.grid_part_tab(gp_servid, gp_id);
  968. alter table informix.grid_part_tab add constraint primary key(gp_servid, gp_id);
  969. revoke all on informix.grid_part_tab from public as informix;
  970. grant select on informix.grid_part_tab to public as informix;
  971. create view informix.grid_part (
  972. gp_id, gp_servid, gp_enable )
  973. as select r.gp_id, r.gp_servid, r.gp_enable
  974. from informix.grid_part_tab r;
  975. revoke all on informix.grid_part from public as informix;
  976. grant select on informix.grid_part to public as informix;
  977. create table informix.grid_users_tab (
  978. gu_id integer, { grid ID }
  979. gu_user char(32) { user name }
  980. ) lock mode row;
  981. create unique index informix.grid_users_idx1 on informix.grid_users_tab(gu_id, gu_user);
  982. alter table informix.grid_users_tab add constraint primary key(gu_id, gu_user);
  983. revoke all on informix.grid_users_tab from public as informix;
  984. grant select on informix.grid_users_tab to public as informix;
  985. create view informix.grid_users(gu_id, gu_user)
  986. as select u.gu_id, u.gu_user
  987. from informix.grid_users_tab u;
  988. revoke all on informix.grid_users from public as informix;
  989. grant select on informix.grid_users to public as informix;
  990. create table informix.grid_region_tab (
  991. gr_regid bigint, { Region ID }
  992. gr_name char(256), { Region Name }
  993. gr_grid integer { Parent Grid }
  994. ) lock mode row;
  995. create unique index informix.grid_reg_idx1
  996. on informix.grid_region_tab(gr_regid);
  997. alter table informix.grid_region_tab add constraint primary key(gr_regid);
  998. alter table informix.grid_region_tab add constraint
  999. ( foreign key (gr_grid) references grid_def_tab(gd_id)
  1000. on delete cascade);
  1001. create unique index informix.grid_reg_idx2
  1002. on informix.grid_region_tab(gr_name);
  1003. revoke all on informix.grid_region_tab from public as informix;
  1004. grant select on informix.grid_region_tab to public as informix;
  1005. create table informix.grid_region_part_tab (
  1006. grp_regid bigint, { Region ID }
  1007. grp_partid integer { participant id }
  1008. ) lock mode row;
  1009. create unique index informix.grid_reg_part_idx
  1010. on informix.grid_region_part_tab(grp_regid, grp_partid);
  1011. alter table informix.grid_region_part_tab
  1012. add constraint primary key(grp_regid, grp_partid);
  1013. alter table informix.grid_region_part_tab add constraint
  1014. (foreign key (grp_regid) references informix.grid_region_tab (gr_regid)
  1015. on delete cascade);
  1016. revoke all on informix.grid_region_part_tab from public as informix;
  1017. grant select on informix.grid_region_part_tab to public as informix;
  1018. create trigger grid_part_del delete on informix.grid_part_tab
  1019. referencing old as gp
  1020. for each row (delete from informix.grid_region_part_tab rp
  1021. where gp.gp_servid = rp.grp_partid and
  1022. rp.grp_regid in (select gr_regid from informix.grid_region_tab
  1023. where gr_grid = gp.gp_id));
  1024. create table informix.grid_database_tab (
  1025. gdb_key bigint, { key }
  1026. gdb_gid integer, { grid ID }
  1027. gdb_dbname char(256) { grid database }
  1028. ) lock mode row;
  1029. create unique index informix.grid_gdb_idx1
  1030. on informix.grid_database_tab(gdb_key);
  1031. alter table informix.grid_database_tab add constraint primary key(gdb_key);
  1032. alter table informix.grid_database_tab add constraint
  1033. ( foreign key (gdb_gid) references grid_def_tab(gd_id)
  1034. on delete cascade);
  1035. revoke all on informix.grid_database_tab from public as informix;
  1036. grant select on informix.grid_database_tab to public as informix;
  1037. create view informix.grid_database (gdb_key, gdb_gid, gdb_dbname)
  1038. as select
  1039. g.gdb_key, g.gdb_gid, cdrgcdisp(g.gdb_dbname)
  1040. from informix.grid_database_tab g;
  1041. revoke all on informix.grid_database from public as informix;
  1042. grant select on informix.grid_database to public as informix;
  1043. create table informix.grid_tablelist_tab (
  1044. gtb_key bigint, { key }
  1045. gtb_dbkey bigint, { grid db key }
  1046. gtb_type char(1), { replicated ? }
  1047. gtb_owner char(64), { table owner }
  1048. gtb_table char(256) { table name }
  1049. ) lock mode row;
  1050. create unique index informix.gtb_idx1
  1051. on informix.grid_tablelist_tab(gtb_key);
  1052. alter table informix.grid_tablelist_tab add constraint
  1053. primary key (gtb_key);
  1054. alter table informix.grid_tablelist_tab add constraint
  1055. ( foreign key (gtb_dbkey) references informix.grid_database_tab(gdb_key)
  1056. on delete cascade);
  1057. create index informix.gtb_idx2
  1058. on informix.grid_tablelist_tab(gtb_table);
  1059. revoke all on informix.grid_tablelist_tab from public as informix;
  1060. grant select on informix.grid_tablelist_tab to public as informix;
  1061. create view informix.grid_tablelist(
  1062. gtb_key, gtb_dbkey, gtb_type, gtb_owner, gtb_table)
  1063. as select
  1064. t.gtb_key, t.gtb_dbkey, t.gtb_type,
  1065. cdrgcdisp(t.gtb_owner), cdrgcdisp(t.gtb_table)
  1066. from informix.grid_tablelist_tab t;
  1067. revoke all on informix.grid_tablelist from public as informix;
  1068. grant select on informix.grid_tablelist to public as informix;
  1069. create table informix.grid_cmd_tab (
  1070. gcmd_source integer, { source node }
  1071. gcmd_stmtid integer, { statement identity }
  1072. gcmd_gridid integer, { grid ID }
  1073. gcmd_numpieces integer, { number of rows in grid_cmd_part }
  1074. gcmd_textsize integer, { size of this command in bytes }
  1075. gcmd_flags integer, { command type }
  1076. gcmd_time integer, { time of command }
  1077. gcmd_database char(128), { database for this operation }
  1078. gcmd_user char(32), { user name for this operation }
  1079. gcmd_locale char(36), { locale for command }
  1080. gcmd_collation char(36), { collation for command }
  1081. gcmd_tag lvarchar { collation tag }
  1082. ) lock mode row;
  1083. create unique index informix.grid_cmd_idx1 on informix.grid_cmd_tab (gcmd_source, gcmd_stmtid);
  1084. alter table informix.grid_cmd_tab add constraint primary key (gcmd_source, gcmd_stmtid);
  1085. revoke all on informix.grid_cmd_tab from public as informix;
  1086. grant select on informix.grid_cmd_tab to public as informix;
  1087. create view informix.grid_cmd (gcmd_source, gcmd_stmtid, gcmd_gridid,
  1088. gcmd_numpieces, gcmd_textsize, gcmd_flags, gcmd_time,
  1089. gcmd_database, gcmd_user, gcmd_locale, gcmd_collation, gcmd_tag)
  1090. as select r.gcmd_source, r.gcmd_stmtid, r.gcmd_gridid, r.gcmd_numpieces,
  1091. r.gcmd_textsize, r.gcmd_flags, informix.timet_to_datetime(r.gcmd_time),
  1092. r.gcmd_database, r.gcmd_user, r.gcmd_locale, r.gcmd_collation,
  1093. r.gcmd_tag
  1094. from informix.grid_cmd_tab r;
  1095. revoke all on informix.grid_cmd from public as informix;
  1096. grant select on informix.grid_cmd to public as informix;
  1097. create table informix.grid_cmd_part_tab (
  1098. gcmdpart_gridid integer, { grid id }
  1099. gcmdpart_source integer, { source node }
  1100. gcmdpart_stmtid integer, { stmt num }
  1101. gcmdpart_seq integer, { stmt sequence }
  1102. gcmdpart_ercmd integer, { er command }
  1103. gcmdpart_text lvarchar(30000) { statement text }
  1104. ) lock mode row;
  1105. create unique index informix.grid_cmd_part_idx1
  1106. on informix.grid_cmd_part_tab (gcmdpart_source, gcmdpart_stmtid, gcmdpart_seq);
  1107. alter table informix.grid_cmd_part_tab
  1108. add constraint primary key (gcmdpart_source,
  1109. gcmdpart_stmtid, gcmdpart_seq);
  1110. revoke all on informix.grid_cmd_part_tab from public as informix;
  1111. grant select on informix.grid_cmd_part_tab to public as informix;
  1112. create view informix.grid_cmd_part (gcmdpart_gridid, gcmdpart_source,
  1113. gcmdpart_stmtid, gcmdpart_seq, gcmdpart_ercmd, gcmdpart_text)
  1114. as select gcmdpart_gridid, gcmdpart_source,
  1115. gcmdpart_stmtid, gcmdpart_seq, gcmdpart_ercmd, gcmdpart_text
  1116. from informix.grid_cmd_part_tab;
  1117. revoke all on informix.grid_cmd_part from public as informix;
  1118. grant select on informix.grid_cmd_part to public as informix;
  1119. create table informix.defered_grid_cmd_tab(
  1120. gcmd_source integer, { source node }
  1121. gcmd_stmtid integer, { statement identity }
  1122. gcmd_gridid integer, { grid ID }
  1123. gcmd_numpieces integer, { number of rows in grid_cmd_part }
  1124. gcmd_textsize integer, { size of this command in bytes }
  1125. gcmd_flags integer, { command type }
  1126. gcmd_time integer, { time of command }
  1127. gcmd_database char(128), { database for this operation }
  1128. gcmd_user char(32), { user name for this operation }
  1129. gcmd_locale char(36), { locale for command }
  1130. gcmd_collation char(36), { collation for command }
  1131. gcmd_tag lvarchar { collation tag }
  1132. ) lock mode row;
  1133. create unique index informix.dgrid_cmd_idx1
  1134. on informix.defered_grid_cmd_tab (gcmd_source, gcmd_stmtid);
  1135. alter table informix.defered_grid_cmd_tab
  1136. add constraint primary key (gcmd_source, gcmd_stmtid);
  1137. revoke all on informix.defered_grid_cmd_tab from public as informix;
  1138. grant select on informix.defered_grid_cmd_tab to public as informix;
  1139. create view informix.defered_grid_cmd (gcmd_source, gcmd_stmtid, gcmd_gridid,
  1140. gcmd_numpieces, gcmd_textsize, gcmd_flags, gcmd_time,
  1141. gcmd_database, gcmd_user, gcmd_locale, gcmd_collation, gcmd_tag)
  1142. as select r.gcmd_source, r.gcmd_stmtid, r.gcmd_gridid,
  1143. r.gcmd_numpieces, r.gcmd_textsize,
  1144. r.gcmd_flags, informix.timet_to_datetime(r.gcmd_time),
  1145. r.gcmd_database, r.gcmd_user, r.gcmd_locale, r.gcmd_collation,
  1146. r.gcmd_tag
  1147. from informix.defered_grid_cmd_tab r;
  1148. revoke all on informix.defered_grid_cmd from public as informix;
  1149. grant select on informix.defered_grid_cmd to public as informix;
  1150. create table informix.defered_grid_cmd_part_tab (
  1151. gcmdpart_gridid integer, { grid id }
  1152. gcmdpart_source integer, { source node }
  1153. gcmdpart_stmtid integer, { stmt num }
  1154. gcmdpart_seq integer, { stmt sequence }
  1155. gcmdpart_ercmd integer, { er command }
  1156. gcmdpart_text lvarchar(30000) { statement text }
  1157. ) lock mode row;
  1158. create unique index informix.dgrid_cmd_part_idx1
  1159. on informix.defered_grid_cmd_part_tab
  1160. (gcmdpart_source, gcmdpart_stmtid, gcmdpart_seq);
  1161. alter table informix.defered_grid_cmd_part_tab
  1162. add constraint primary key (gcmdpart_source,
  1163. gcmdpart_stmtid, gcmdpart_seq);
  1164. revoke all on informix.defered_grid_cmd_part_tab from public as informix;
  1165. grant select on informix.defered_grid_cmd_part_tab to public as informix;
  1166. create view informix.defered_grid_cmd_part (gcmdpart_gridid,
  1167. gcmdpart_source, gcmdpart_stmtid, gcmdpart_seq, gcmdpart_ercmd,
  1168. gcmdpart_text)
  1169. as select gcmdpart_gridid, gcmdpart_source,
  1170. gcmdpart_stmtid, gcmdpart_seq, gcmdpart_ercmd, gcmdpart_text
  1171. from informix.defered_grid_cmd_part_tab;
  1172. revoke all on informix.defered_grid_cmd_part from public as informix;
  1173. grant select on informix.defered_grid_cmd_part to public as informix;
  1174. create table informix.grid_cmd_errors_tab (
  1175. gerr_target integer, { target node }
  1176. gerr_errid integer, { target errid }
  1177. gerr_source integer, { source node }
  1178. gerr_stmtid integer, { statment identity }
  1179. gerr_gridid integer, { grid id }
  1180. gerr_sqlerr integer, { sql error code }
  1181. gerr_isamerr integer, { isam error code }
  1182. gerr_time integer, { time of nack }
  1183. gerr_text lvarchar { error text }
  1184. ) lock mode row;
  1185. alter table informix.grid_cmd_errors_tab
  1186. add constraint primary key (gerr_target, gerr_errid);
  1187. create index informix.grid_errors_source on informix.grid_cmd_errors_tab
  1188. (gerr_gridid, gerr_source, gerr_stmtid);
  1189. revoke all on informix.grid_cmd_errors_tab from public as informix;
  1190. grant select on informix.grid_cmd_errors_tab to public as informix;
  1191. create trigger informix.grid_cmd_clean_nacks insert on informix.grid_cmd_errors_tab
  1192. referencing new as newrow
  1193. for each row
  1194. (execute procedure informix.cdrcmd(108));
  1195. create view informix.grid_cmd_errors (
  1196. gerr_target, gerr_errid, gerr_source, gerr_stmtid, gerr_gridid,
  1197. gerr_sqlerr, gerr_isamerr, gerr_time, gerr_text )
  1198. as select r.gerr_target, r.gerr_errid, r.gerr_source, r.gerr_stmtid,
  1199. r.gerr_gridid, r.gerr_sqlerr, r.gerr_isamerr,
  1200. informix.timet_to_datetime( r.gerr_time), r.gerr_text
  1201. from informix.grid_cmd_errors_tab r;
  1202. revoke all on informix.grid_cmd_errors from public as informix;
  1203. grant select on informix.grid_cmd_errors to public as informix;
  1204. create table informix.grid_cmd_ack_tab (
  1205. gack_target integer, { target node }
  1206. gack_ackid integer, { ack identity }
  1207. gack_gridid integer, { grid id }
  1208. gack_source integer, { source node }
  1209. gack_stmtid integer, { statement id }
  1210. gack_time integer, { time of ack }
  1211. gack_output lvarchar(30000) { output from grid_function }
  1212. ) lock mode row;
  1213. create unique index informix.grid_ack_idx1 on informix.grid_cmd_ack_tab (
  1214. gack_source, gack_stmtid, gack_target, gack_ackid);
  1215. alter table informix.grid_cmd_ack_tab
  1216. add constraint primary key (gack_source, gack_stmtid,
  1217. gack_target, gack_ackid);
  1218. revoke all on informix.grid_cmd_ack_tab from public as informix;
  1219. grant select on informix.grid_cmd_ack_tab to public as informix;
  1220. create trigger informix.grid_cmd_clean_acks insert on informix.grid_cmd_ack_tab
  1221. referencing new as newrow
  1222. for each row
  1223. (execute procedure informix.cdrcmd(108));
  1224. create view informix.grid_cmd_ack ( gack_target, gack_ackid, gack_gridid,
  1225. gack_source, gack_stmtid, gack_time, gack_output )
  1226. as select r.gack_target, r.gack_ackid, r.gack_gridid,
  1227. r.gack_source, r.gack_stmtid,
  1228. informix.timet_to_datetime(r.gack_time), r.gack_output
  1229. from informix.grid_cmd_ack_tab r;
  1230. revoke all on informix.grid_cmd_ack from public as informix;
  1231. grant select on informix.grid_cmd_ack to public as informix;
  1232. create table informix.grid_redo_tab(
  1233. gredo_source integer, { node on which command executed }
  1234. gredo_id integer, { redo id }
  1235. gredo_time integer, { time of redo }
  1236. gredo_flags integer, { flags and options }
  1237. gredo_grid integer, { grid to redo }
  1238. gredo_source_list lvarchar, { source list to redo }
  1239. gredo_target_list lvarchar, { target list to redo }
  1240. gredo_cmd_list lvarchar, { command list to redo }
  1241. gredo_tag lvarchar { tag id for redo }
  1242. ) lock mode row;
  1243. create unique index informix.grid_redo_idx1
  1244. on informix.grid_redo_tab (gredo_source, gredo_id);
  1245. alter table informix.grid_redo_tab
  1246. add constraint primary key(gredo_source, gredo_id);
  1247. revoke all on informix.grid_redo_tab from public as informix;
  1248. grant select on informix.grid_redo_tab to public as informix;
  1249. create procedure informix.grid_cmd_del(
  1250. sourceid integer,
  1251. stmtid integer)
  1252. define repl_state integer;
  1253. execute function informix.ifx_get_erstate() into repl_state;
  1254. execute procedure informix.ifx_set_erstate(0);
  1255. delete {+ AVOID_FULL } from informix.grid_cmd_part_tab
  1256. where gcmdpart_source = sourceid
  1257. and gcmdpart_stmtid = stmtid;
  1258. delete {+ AVOID_FULL } from informix.grid_cmd_errors_tab
  1259. where gerr_source = sourceid
  1260. and gerr_stmtid = stmtid;
  1261. delete {+ AVOID_FULL } from informix.grid_cmd_ack_tab
  1262. where gack_source = sourceid
  1263. and gack_stmtid = stmtid;
  1264. execute procedure informix.ifx_set_erstate(repl_state);
  1265. end procedure;
  1266. create procedure informix.grid_cdr_node_del(nodeid integer)
  1267. define replstate integer;
  1268. execute function informix.ifx_get_erstate() into replstate;
  1269. execute procedure informix.ifx_set_erstate(0);
  1270. delete {+ AVOID_FULL } from informix.grid_part_tab
  1271. where gp_servid = nodeid;
  1272. delete {+ AVOID_FULL } from informix.grid_cmd_tab
  1273. where gcmd_source = nodeid;
  1274. delete {+ AVOID_FULL } from informix.grid_cmd_errors_tab
  1275. where gerr_target = nodeid;
  1276. delete {+ AVOID_FULL } from informix.grid_cmd_ack_tab
  1277. where gack_target = nodeid;
  1278. execute procedure informix.ifx_set_erstate(replstate);
  1279. end procedure;
  1280. create procedure informix.servdef_del(cdrid integer)
  1281. define replstate integer;
  1282. execute function informix.ifx_get_erstate() into replstate;
  1283. execute procedure informix.ifx_set_erstate(0);
  1284. delete {+ AVOID_FULL } from informix.grid_cdr_node_tab
  1285. where gn_id = cdrid;
  1286. execute procedure informix.ifx_set_erstate(replstate);
  1287. end procedure;
  1288. create trigger informix.servdef_trig1 delete on informix.servdef_tab
  1289. referencing old as oldrow
  1290. for each row
  1291. (execute procedure informix.servdef_del(oldrow.servid));
  1292. create trigger informix.grid_cmd_trig1 insert on informix.grid_cmd_tab
  1293. referencing new as newrow
  1294. for each row
  1295. (execute procedure
  1296. informix.cdrcmd(107, newrow.gcmd_source, newrow.gcmd_stmtid));
  1297. create trigger informix.grid_cmd_trig2 delete on informix.grid_cmd_tab
  1298. referencing old as oldrow
  1299. for each row
  1300. (execute procedure informix.grid_cmd_del(
  1301. oldrow.gcmd_source, oldrow.gcmd_stmtid));
  1302. create trigger informix.grid_cdr_cmd_trig1 delete on informix.grid_cdr_node_tab
  1303. referencing old as oldrow
  1304. for each row
  1305. (execute procedure informix.grid_cdr_node_del(oldrow.gn_id));
  1306. create trigger informix.grid_cmd_redo1 insert on informix.grid_redo_tab
  1307. referencing new as newrow
  1308. for each row
  1309. (execute procedure
  1310. informix.cdrcmd(109, newrow.gredo_source, newrow.gredo_id));
  1311. create view informix.grid_redo (gredo_source, gredo_id, gredo_time, gredo_flags,
  1312. gredo_grid, gredo_source_list, gredo_target_list,
  1313. gredo_cmd_list)
  1314. as select gredo_source, gredo_id, informix.timet_to_datetime(gredo_time),
  1315. gredo_flags,
  1316. gredo_grid, gredo_source_list, gredo_target_list,
  1317. gredo_cmd_list
  1318. from informix.grid_redo_tab;
  1319. revoke all on informix.grid_redo from public as informix;
  1320. grant select on informix.grid_redo to public as informix;
  1321. create table informix.grid_repl_tab (
  1322. grep_gridid integer, { grid id }
  1323. grep_source integer, { source node }
  1324. grep_stmtseq integer, { stmtement identity }
  1325. grep_replid integer { replicate ID }
  1326. ) lock mode row;
  1327. alter table informix.grid_repl_tab
  1328. add constraint primary key (grep_source, grep_stmtseq);
  1329. revoke all on informix.grid_repl_tab from public as informix;
  1330. grant select on informix.grid_repl_tab to public as informix;
  1331. create table informix.grid_cm_nodes (
  1332. grid_cm_cm_name varchar(255), { CM name }
  1333. grid_cm_cm_node varchar(255), { node CM is monitoring }
  1334. grid_cm_cm_host varchar(255)
  1335. ) with ERKEY lock mode row;
  1336. revoke all on informix.grid_cm_nodes from public as informix;
  1337. grant select on informix.grid_cm_nodes to public as informix;
  1338. create index informix.grid_cm_nodes_idx1 on informix.grid_cm_nodes
  1339. (grid_cm_cm_name) in table;
  1340. create table informix.grid_cm_sla (
  1341. grid_cm_sla_cm_name varchar(255), { CM name }
  1342. grid_cm_sla_name varchar(255), { SLA NAME }
  1343. grid_cm_sla_type char(1), { Type of SLA }
  1344. grid_cm_sla_rule lvarchar { rule of this SLA }
  1345. ) with ERKEY lock mode row;
  1346. revoke all on informix.grid_cm_sla from public as informix;
  1347. grant select on informix.grid_cm_sla to public as informix;
  1348. create index informix.grid_cm_sla_idx1 on informix.grid_cm_sla
  1349. (grid_cm_sla_cm_name) in table;
  1350. create table informix.grid_cm_er_serv (
  1351. grid_cm_er_name varchar(255), { CM name }
  1352. grid_cm_er_sla_name varchar(255), { SLA name }
  1353. grid_cm_er_order integer, { order }
  1354. grid_cm_er_server varchar(255) { server name }
  1355. ) with ERKEY lock mode row;
  1356. revoke all on informix.grid_cm_er_serv from public as informix;
  1357. grant select on informix.grid_cm_er_serv to public as informix;
  1358. create index informix.grid_cm_er_serv1_idx1 on informix.grid_cm_er_serv
  1359. (grid_cm_er_name) in table;
  1360. create table informix.grid_copy (
  1361. gcpy_source integer, { source node }
  1362. gcpy_stmtid integer, { statement identity }
  1363. gcpy_gridid integer, { grid ID }
  1364. gcpy_files ifmx_er_extfile { file to copy }
  1365. ) lock mode row;
  1366. create unique index informix.grid_cpy_idx1 on informix.grid_copy (gcpy_source, gcpy_stmtid);
  1367. alter table informix.grid_copy add constraint primary key (gcpy_source, gcpy_stmtid);
  1368. revoke all on informix.grid_copy from public as informix;
  1369. grant select on informix.grid_copy to public as informix;
  1370. create table informix.grid_signal (
  1371. gs_id integer primary key,
  1372. gs_version integer,
  1373. gs_signal integer,
  1374. gs_data char(2000)
  1375. ) lock mode row;
  1376. insert into grid_signal values (1,0,0,"");
  1377. revoke all on informix.grid_signal from public as informix;
  1378. grant select on informix.grid_signal to public as informix;
  1379. create trigger informix.grid_signal1 update on informix.grid_signal
  1380. referencing new as newrow
  1381. for each row
  1382. (execute procedure
  1383. informix.cdrcmd(newrow.gs_signal, newrow.gs_data));
  1384. create trigger informix.grid_signal2 insert on informix.grid_signal
  1385. referencing new as newrow
  1386. for each row
  1387. (execute procedure
  1388. informix.cdrcmd(newrow.gs_signal, newrow.gs_data));
  1389. { Tables, views, etc. for Quality of Data (qod) functionality }
  1390. { quality of data version table }
  1391. create table informix.qod_version (
  1392. version integer
  1393. );
  1394. insert into informix.qod_version (version) values (1);
  1395. revoke all on informix.qod_version from public as informix;
  1396. grant select on informix.qod_version to public as informix;
  1397. { qod control information }
  1398. create table informix.qod_control_tab (
  1399. qod_master_node_id integer not null, { master node }
  1400. state integer not null, { state of Qod }
  1401. when_last_turned_on integer default 0, { in seconds }
  1402. when_last_turned_off integer default 0, { in seconds }
  1403. last_updated integer not null { in seconds }
  1404. ) with CRCOLS lock mode row;
  1405. alter table informix.qod_control_tab add constraint primary key(qod_master_node_id);
  1406. revoke all on informix.qod_control_tab from public as informix;
  1407. grant select on informix.qod_control_tab to public as informix;
  1408. { this trigger fires when a new qod master node has been set }
  1409. create trigger informix.qod_control_tab_trig1
  1410. insert on informix.qod_control_tab
  1411. after (execute procedure informix.cdrcmd(106));
  1412. { this trigger fires when the state of qod changes }
  1413. create trigger informix.qod_control_tab_trig2
  1414. update on informix.qod_control_tab
  1415. after (execute procedure informix.cdrcmd(106));
  1416. create view informix.qod_control (
  1417. qod_master_node_id, state, when_last_turned_on, when_last_turned_off,
  1418. last_updated)
  1419. as select
  1420. qod_master_node_id, state,
  1421. informix.timet_to_datetime(when_last_turned_on),
  1422. informix.timet_to_datetime(when_last_turned_off),
  1423. informix.timet_to_datetime(last_updated)
  1424. from informix.qod_control_tab;
  1425. revoke all on informix.qod_control from public as informix;
  1426. grant select on informix.qod_control to public as informix;
  1427. { clock difference between qod master node and other node }
  1428. create table informix.qod_clock_differences_tab (
  1429. masterid integer not null, { Qod master node id }
  1430. servid integer not null, { node that qod master is compared to }
  1431. time_difference float not null, { in centiseconds }
  1432. num_measurements integer not null, { num of measurements taken }
  1433. last_updated integer not null { in seconds }
  1434. ) lock mode row;
  1435. alter table informix.qod_clock_differences_tab
  1436. add constraint primary key(masterid, servid);
  1437. revoke all on informix.qod_clock_differences_tab from public as informix;
  1438. grant select on informix.qod_clock_differences_tab to public as informix;
  1439. create view informix.qod_clock_differences (
  1440. masterid, servid, time_difference, num_measurements, last_updated)
  1441. as select
  1442. masterid, servid, time_difference, num_measurements,
  1443. informix.timet_to_datetime(last_updated)
  1444. from informix.qod_clock_differences_tab;
  1445. revoke all on informix.qod_clock_differences from public as informix;
  1446. grant select on informix.qod_clock_differences to public as informix;
  1447. { replicate latency between other nodes and me }
  1448. create table informix.qod_replication_latency_tab (
  1449. sourceid integer not null, { source node }
  1450. duration float not null,
  1451. { latency in centiseconds not adjusting for any clock difference }
  1452. num_measurements integer not null, { number of measurements }
  1453. last_updated integer not null { in seconds }
  1454. ) lock mode row;
  1455. alter table informix.qod_replication_latency_tab add constraint
  1456. primary key(sourceid);
  1457. revoke all on informix.qod_replication_latency_tab from public as informix;
  1458. grant select on informix.qod_replication_latency_tab to public as informix;
  1459. create view informix.qod_replication_latency (
  1460. sourceid, duration, num_measurements, last_updated)
  1461. as select
  1462. sourceid, duration, num_measurements,
  1463. informix.timet_to_datetime(last_updated)
  1464. from informix.qod_replication_latency_tab;
  1465. revoke all on informix.qod_replication_latency from public as informix;
  1466. grant select on informix.qod_replication_latency to public as informix;
  1467. { stores individual measurements of replication latency }
  1468. create table informix.qod_replicate_latency_measurements (
  1469. sourceid integer not null, { source node }
  1470. targetid integer not null, { target node }
  1471. counter integer not null, { unique measurement number }
  1472. time_sent float not null,
  1473. { when txn committed on source in centiseconds }
  1474. time_received float
  1475. { when tx committed on target in centiseconds }
  1476. ) lock mode row;
  1477. alter table informix.qod_replicate_latency_measurements add constraint
  1478. primary key (sourceid, targetid, counter);
  1479. revoke all on informix.qod_replicate_latency_measurements from public as informix;
  1480. grant select on informix.qod_replicate_latency_measurements to public as informix;
  1481. { this trigger helps measure when a txn committed on the target node }
  1482. create procedure informix.getTime() returning float
  1483. define curTime float;
  1484. execute function cdrcmdfl(104) into curTime;
  1485. return curTime;
  1486. end procedure;
  1487. create trigger informix.qod_replicate_latency_measurements_trig1
  1488. insert on informix.qod_replicate_latency_measurements
  1489. referencing new as new
  1490. for each row when (new.targetid IN (select servid from sysmaster:syscdrs
  1491. where cnnstate = "L")) (
  1492. execute procedure informix.getTime() INTO time_received
  1493. );
  1494. { records qod info about a given replicate-source node pair }
  1495. create table informix.qod_replicate_tab (
  1496. repid integer not null, { replicate id }
  1497. sourceid integer not null, { where failed txn originated }
  1498. last_reset_time integer default 0 not null, { when last reset }
  1499. { time when a replicate was last cdr repaired or synced }
  1500. first_failure_time integer default 0 not null,
  1501. { for the first txn with a row that failured to be applied the time }
  1502. { on the target at or after which the failure occurred }
  1503. first_failure_rowcnt integer default 0 not null
  1504. { syscdrrecvqprog.total_failed_rows before first failure noticed }
  1505. ) lock mode row;
  1506. create unique index informix.qod_replicate_tab_idx1 on informix.qod_replicate_tab
  1507. (repid, sourceid) in table;
  1508. alter table informix.qod_replicate_tab add constraint
  1509. primary key(repid, sourceid);
  1510. revoke all on informix.qod_replicate_tab from public as informix;
  1511. grant select on informix.qod_replicate_tab to public as informix;
  1512. create view informix.qod_replicate (
  1513. repid, sourceid, last_reset_time, first_failure_time,
  1514. first_failure_rowcnt)
  1515. as select
  1516. repid, sourceid, informix.timet_to_datetime(last_reset_time),
  1517. informix.timet_to_datetime(first_failure_time), first_failure_rowcnt
  1518. from informix.qod_replicate_tab;
  1519. revoke all on informix.qod_replicate from public as informix;
  1520. grant select on informix.qod_replicate to public as informix;
  1521. create dba function informix.ifx_local2utf8(
  1522. informix.lvarchar, informix.integer)
  1523. returns informix.lvarchar
  1524. with (HANDLESNULLS, PARALLELIZABLE, NOT VARIANT)
  1525. external name '(cdrUTF8_cvt2UTF8)'
  1526. language C;
  1527. grant execute on function informix.ifx_local2utf8(
  1528. informix.lvarchar, integer)
  1529. to public as informix;
  1530. create table informix.backgroundsync(
  1531. logid integer,
  1532. logpos integer,
  1533. done_logid integer,
  1534. done_logpos integer,
  1535. type integer,
  1536. flags integer,
  1537. partnum integer,
  1538. start_page integer,
  1539. num_pages integer,
  1540. primary key (logid, logpos)) lock mode row;
  1541. revoke all on informix.backgroundsync from public as informix;
  1542. grant select on informix.backgroundsync to public as informix;
  1543. create table informix.timeseries_virtual_tables_tab (
  1544. db char(256), { database wherein the VT resides }
  1545. owner char(64), { owner of the virtual table }
  1546. table char(256) { name of the virtual table }
  1547. ) lock mode row;
  1548. create unique index informix.timeseries_virtual_tables_tab_idx1
  1549. on informix.timeseries_virtual_tables_tab (table)
  1550. in table;
  1551. alter table informix.timeseries_virtual_tables_tab add constraint
  1552. primary key(table);
  1553. revoke all on informix.timeseries_virtual_tables_tab from public as informix;
  1554. grant select on informix.timeseries_virtual_tables_tab to public as informix;
  1555. create view informix.timeseries_virtual_tables (
  1556. db, owner, table)
  1557. as select cdrgcdisp(db), cdrgcdisp(owner), cdrgcdisp(table)
  1558. from informix.timeseries_virtual_tables_tab;
  1559. revoke all on informix.timeseries_virtual_tables from public as informix;
  1560. grant select on informix.timeseries_virtual_tables to public as informix;
  1561. { ************************************************************************ }
  1562. { Objects needed to support shard replication }
  1563. { ************************************************************************ }
  1564. create table informix.shard_tab (
  1565. shard_name char(256), { name of the shard }
  1566. shard_version integer, { version of the shard }
  1567. shard_id integer, { shard ID - same as replset }
  1568. flags integer, { flags describing shard }
  1569. db char(256), { database name of sharded table }
  1570. owner char(64), { owner name of sharded table }
  1571. table char(256), { table name of sharded table }
  1572. table_alias char(256), { Collection alias }
  1573. shard_key lvarchar, { sharding key }
  1574. shard_version_col lvarchar { column to identify an update }
  1575. ) lock mode row;
  1576. create unique index informix.shard_idx
  1577. on informix.shard_tab (shard_name, shard_version) in table;
  1578. create unique index informix.shard_idx2
  1579. on informix.shard_tab (shard_id, shard_version) in table;
  1580. alter table informix.shard_tab
  1581. add constraint primary key (shard_id, shard_version);
  1582. revoke all on informix.shard_tab from public as informix;
  1583. grant select on informix.shard_tab to public as informix;
  1584. create view informix.shard
  1585. (shard_name, shard_version, shard_id, flags,
  1586. db, owner, table, table_alias, shard_key, shard_version_col)
  1587. as select cdrgcdisp(shard_name), shard_version,
  1588. shard_id, flags,
  1589. cdrgcdisp(db), cdrgcdisp(owner), cdrgcdisp(table), cdrgcdisp(table_alias),
  1590. cdrgcdisp(shard_key), cdrgcdisp(shard_version_col)
  1591. from informix.shard_tab;
  1592. revoke all on informix.shard from public as informix;
  1593. grant select on informix.shard to public as informix;
  1594. { ------------------------------------------------------------------- }
  1595. { Each target in the sharding schema has a replicate associated }
  1596. { with it. All participants other than the target are defined as }
  1597. { send only nodes. }
  1598. { ------------------------------------------------------------------- }
  1599. create table informix.shardpart_tab (
  1600. shard_id integer, { shard ID - match with shard_tab }
  1601. shard_version integer, { version of shard }
  1602. server integer, { CDRID of this node }
  1603. flags integer, { Shard Flags }
  1604. replicate_id integer, { replicate id for this target }
  1605. key_values lvarchar(30000) { where clause of this target }
  1606. ) lock mode row;
  1607. create unique index informix.shard_part_idx
  1608. on informix.shardpart_tab (shard_id, shard_version, server) in table;
  1609. alter table informix.shardpart_tab
  1610. add constraint primary key (shard_id, shard_version, server);
  1611. alter table informix.shardpart_tab
  1612. add constraint foreign key(shard_id, shard_version)
  1613. references informix.shard_tab(shard_id, shard_version)
  1614. on delete cascade;
  1615. revoke all on informix.shard_tab from public as informix;
  1616. grant select on informix.shard_tab to public as informix;
  1617. create view informix.shardpart
  1618. (shard_id, shard_version, server, flags, replicate_id, key_values )
  1619. as select shard_id, shard_version, server, flags, replicate_id,
  1620. cdrgcdisp(key_values) from informix.shardpart_tab;
  1621. revoke all on informix.shardpart from public as informix;
  1622. grant select on informix.shardpart to public as informix;
  1623. create table informix.shard_sync (
  1624. state char(1), { state of the sync }
  1625. shard_id integer, { shard_id of the sync }
  1626. shard_version integer, { version of the sync }
  1627. master_node integer, { node on which command originated }
  1628. needack integer, { ACKs from target nodes }
  1629. complete_needack integer { ACKs indicating node has finished }
  1630. ) lock mode row;
  1631. create index informix.shard_sync_shard_id_idx on informix.shard_sync
  1632. (shard_id, shard_version) in table;
  1633. revoke all on informix.shard_sync from public as informix;
  1634. grant select on informix.shard_sync to public as informix;
  1635. { *********************************************************************** }
  1636. { Objects needed to manage events used initially for sharding }
  1637. { *********************************************************************** }
  1638. { The cdr_events table is used to communicate between a specific node }
  1639. { or to broadcast communication to all nodes. There is a default }
  1640. { broadcast replicate which is passed to all targets. The where }
  1641. { clause for the default replicate is "where to_node = 0 ". }
  1642. { Additionally if there is a need to communicate directly to a node }
  1643. { then there will be a distinct replicate created with a where clause }
  1644. { of where to_node = <cdrid> }
  1645. create table informix.cdr_events (
  1646. to_node integer, { Target node }
  1647. from_node integer, { Source node }
  1648. event_num integer, { output of eventSequence.NEXTVAL }
  1649. sequence_num integer, { sequence number for multipart messages }
  1650. event_type integer, { event code }
  1651. event_data lvarchar(30000) { payload }
  1652. ) lock mode row;
  1653. revoke all on informix.cdr_events from public as informix;
  1654. grant select on informix.cdr_events to public as informix;
  1655. create unique index informix.cdr_event_idx
  1656. on informix.cdr_events (from_node, event_num, sequence_num);
  1657. alter table informix.cdr_events
  1658. add constraint primary key (from_node, event_num, sequence_num);
  1659. create sequence informix.eventSequence cycle;
  1660. revoke all on informix.eventSequence from public as informix;
  1661. grant select on informix.eventSequence to public as informix;
  1662. { cdr_even_sp passes the cdr_events row to ER for processing }
  1663. create dba procedure
  1664. informix.cdr_event_sp(informix.integer, informix.integer,
  1665. informix.integer, informix.integer, informix.lvarchar)
  1666. with (handlesnulls, parallelizable)
  1667. external name '(cdr_event_sp)'
  1668. language c
  1669. end procedure;
  1670. grant execute on procedure informix.cdr_event_sp(
  1671. informix.integer,
  1672. informix.integer, informix.integer, informix.integer,
  1673. informix.lvarchar) to public as informix;
  1674. create trigger informix.cdr_event_trig1
  1675. insert on informix.cdr_events
  1676. referencing new as newrow
  1677. for each row
  1678. (execute procedure
  1679. informix.cdr_event_sp(newrow.from_node, newrow.event_num,
  1680. newrow.sequence_num, newrow.event_type, newrow.event_data));
  1681. close database;