@@ -1617,68 +1617,152 @@ void put_index( burp_rel* relation)
16171617 // requests--this requires more code but it is well worth it
16181618 // for the performance benefits, especially remotely--deej
16191619
1620- FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle1)
1621- X IN RDB$INDICES WITH
1622- X.RDB$RELATION_NAME EQ relation->rel_name
1620+ if (tdgbl->runtimeODS >= DB_VERSION_DDL13_1)
1621+ {
1622+ FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle1)
1623+ X IN RDB$INDICES WITH
1624+ X.RDB$RELATION_NAME EQ relation->rel_name
1625+
1626+ count = 0;
1627+ FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle2)
1628+ I_S IN RDB$INDEX_SEGMENTS CROSS
1629+ RFR IN RDB$RELATION_FIELDS WITH
1630+ I_S.RDB$FIELD_NAME = RFR.RDB$FIELD_NAME AND
1631+ I_S.RDB$INDEX_NAME = X.RDB$INDEX_NAME AND
1632+ RFR.RDB$RELATION_NAME = relation->rel_name
1633+
1634+ count++;
1635+
1636+ END_FOR;
1637+ ON_ERROR
1638+ general_on_error();
1639+ END_ERROR;
16231640
1624- count = 0;
1625- FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle2)
1626- I_S IN RDB$INDEX_SEGMENTS CROSS
1627- RFR IN RDB$RELATION_FIELDS WITH
1628- I_S.RDB$FIELD_NAME = RFR.RDB$FIELD_NAME AND
1629- I_S.RDB$INDEX_NAME = X.RDB$INDEX_NAME AND
1630- RFR.RDB$RELATION_NAME = relation->rel_name
1641+ if (count != (ULONG) X.RDB$SEGMENT_COUNT)
1642+ {
1643+ BURP_print(true, 180, SafeArg() << X.RDB$INDEX_NAME << count << X.RDB$SEGMENT_COUNT);
1644+ continue;
1645+ }
1646+
1647+ put(tdgbl, rec_index);
1648+ const ULONG l = PUT_TEXT (att_index_name, X.RDB$INDEX_NAME);
1649+ MISC_terminate (X.RDB$INDEX_NAME, temp, l, sizeof(temp));
1650+ BURP_verbose (151, temp);
1651+ // msg 151 writing index %s
1652+ put_int32 (att_segment_count, X.RDB$SEGMENT_COUNT);
1653+ put_int32 (att_index_inactive, X.RDB$INDEX_INACTIVE);
1654+ put_int32 (att_index_unique_flag, X.RDB$UNIQUE_FLAG);
1655+
1656+ FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle5)
1657+ Y IN RDB$INDEX_SEGMENTS WITH
1658+ Y.RDB$INDEX_NAME EQ X.RDB$INDEX_NAME
1659+ SORTED BY Y.RDB$FIELD_POSITION
16311660
1632- count++;
1661+ PUT_TEXT (att_index_field_name, Y.RDB$FIELD_NAME);
1662+
1663+ END_FOR;
1664+ ON_ERROR
1665+ general_on_error();
1666+ END_ERROR;
1667+
1668+ put_source_blob (att_index_description2, att_index_description, X.RDB$DESCRIPTION);
1669+ put_int32 (att_index_type, X.RDB$INDEX_TYPE);
1670+
1671+ if (!X.RDB$EXPRESSION_SOURCE.NULL)
1672+ {
1673+ put_source_blob(att_index_expression_source, att_index_expression_source,
1674+ X.RDB$EXPRESSION_SOURCE);
1675+ }
1676+ if (!X.RDB$EXPRESSION_BLR.NULL)
1677+ put_blr_blob(att_index_expression_blr, X.RDB$EXPRESSION_BLR);
1678+
1679+ if (!X.RDB$FOREIGN_KEY.NULL)
1680+ PUT_TEXT (att_index_foreign_key, X.RDB$FOREIGN_KEY);
1681+
1682+ if (!X.RDB$CONDITION_SOURCE.NULL)
1683+ {
1684+ put_source_blob(att_index_condition_source, att_index_condition_source,
1685+ X.RDB$CONDITION_SOURCE);
1686+ }
1687+ if (!X.RDB$CONDITION_BLR.NULL)
1688+ put_blr_blob(att_index_condition_blr, X.RDB$CONDITION_BLR);
1689+
1690+ put(tdgbl, att_end);
16331691
16341692 END_FOR;
16351693 ON_ERROR
16361694 general_on_error();
16371695 END_ERROR;
1696+ }
1697+ else
1698+ {
1699+ FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle1)
1700+ X IN RDB$INDICES WITH
1701+ X.RDB$RELATION_NAME EQ relation->rel_name
16381702
1639- if (count != (ULONG) X.RDB$SEGMENT_COUNT)
1640- {
1641- BURP_print(true, 180, SafeArg() << X.RDB$INDEX_NAME << count << X.RDB$SEGMENT_COUNT);
1642- continue;
1643- }
1703+ count = 0;
1704+ FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle2)
1705+ I_S IN RDB$INDEX_SEGMENTS CROSS
1706+ RFR IN RDB$RELATION_FIELDS WITH
1707+ I_S.RDB$FIELD_NAME = RFR.RDB$FIELD_NAME AND
1708+ I_S.RDB$INDEX_NAME = X.RDB$INDEX_NAME AND
1709+ RFR.RDB$RELATION_NAME = relation->rel_name
1710+
1711+ count++;
1712+
1713+ END_FOR;
1714+ ON_ERROR
1715+ general_on_error();
1716+ END_ERROR;
1717+
1718+ if (count != (ULONG) X.RDB$SEGMENT_COUNT)
1719+ {
1720+ BURP_print(true, 180, SafeArg() << X.RDB$INDEX_NAME << count << X.RDB$SEGMENT_COUNT);
1721+ continue;
1722+ }
1723+
1724+ put(tdgbl, rec_index);
1725+ const ULONG l = PUT_TEXT (att_index_name, X.RDB$INDEX_NAME);
1726+ MISC_terminate (X.RDB$INDEX_NAME, temp, l, sizeof(temp));
1727+ BURP_verbose (151, temp);
1728+ // msg 151 writing index %s
1729+ put_int32 (att_segment_count, X.RDB$SEGMENT_COUNT);
1730+ put_int32 (att_index_inactive, X.RDB$INDEX_INACTIVE);
1731+ put_int32 (att_index_unique_flag, X.RDB$UNIQUE_FLAG);
1732+
1733+ FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle5)
1734+ Y IN RDB$INDEX_SEGMENTS WITH
1735+ Y.RDB$INDEX_NAME EQ X.RDB$INDEX_NAME
1736+ SORTED BY Y.RDB$FIELD_POSITION
1737+
1738+ PUT_TEXT (att_index_field_name, Y.RDB$FIELD_NAME);
1739+
1740+ END_FOR;
1741+ ON_ERROR
1742+ general_on_error();
1743+ END_ERROR;
16441744
1645- put(tdgbl, rec_index);
1646- const ULONG l = PUT_TEXT (att_index_name, X.RDB$INDEX_NAME);
1647- MISC_terminate (X.RDB$INDEX_NAME, temp, l, sizeof(temp));
1648- BURP_verbose (151, temp);
1649- // msg 151 writing index %s
1650- put_int32 (att_segment_count, X.RDB$SEGMENT_COUNT);
1651- put_int32 (att_index_inactive, X.RDB$INDEX_INACTIVE);
1652- put_int32 (att_index_unique_flag, X.RDB$UNIQUE_FLAG);
1745+ put_source_blob (att_index_description2, att_index_description, X.RDB$DESCRIPTION);
1746+ put_int32 (att_index_type, X.RDB$INDEX_TYPE);
1747+
1748+ if (!X.RDB$EXPRESSION_SOURCE.NULL)
1749+ {
1750+ put_source_blob(att_index_expression_source, att_index_expression_source,
1751+ X.RDB$EXPRESSION_SOURCE);
1752+ }
1753+ if (!X.RDB$EXPRESSION_BLR.NULL)
1754+ put_blr_blob(att_index_expression_blr, X.RDB$EXPRESSION_BLR);
16531755
1654- FOR (REQUEST_HANDLE tdgbl->handles_put_index_req_handle5)
1655- Y IN RDB$INDEX_SEGMENTS WITH
1656- Y.RDB$INDEX_NAME EQ X.RDB$INDEX_NAME
1657- SORTED BY Y.RDB$FIELD_POSITION
1756+ if (!X.RDB$FOREIGN_KEY.NULL)
1757+ PUT_TEXT (att_index_foreign_key, X.RDB$FOREIGN_KEY);
16581758
1659- PUT_TEXT (att_index_field_name, Y.RDB$FIELD_NAME );
1759+ put(tdgbl, att_end );
16601760
16611761 END_FOR;
16621762 ON_ERROR
16631763 general_on_error();
16641764 END_ERROR;
1665-
1666- put_source_blob (att_index_description2, att_index_description, X.RDB$DESCRIPTION);
1667- put_int32 (att_index_type, X.RDB$INDEX_TYPE);
1668-
1669- if (!X.RDB$EXPRESSION_SOURCE.NULL)
1670- put_source_blob (att_index_expression_source, att_index_expression_source,
1671- X.RDB$EXPRESSION_SOURCE);
1672- if (!X.RDB$EXPRESSION_BLR.NULL)
1673- put_blr_blob (att_index_expression_blr, X.RDB$EXPRESSION_BLR);
1674- if (!X.RDB$FOREIGN_KEY.NULL)
1675- PUT_TEXT (att_index_foreign_key, X.RDB$FOREIGN_KEY);
1676- put(tdgbl, att_end);
1677-
1678- END_FOR;
1679- ON_ERROR
1680- general_on_error();
1681- END_ERROR;
1765+ }
16821766}
16831767
16841768
0 commit comments