| 1604 | // |
| 1605 | |
| 1606 | static void create_table( gpre_req* request, const act* action) |
| 1607 | { |
| 1608 | // add relation name |
| 1609 | |
| 1610 | const gpre_rel* relation = (gpre_rel*) action->act_object; |
| 1611 | put_symbol(request, isc_dyn_def_rel, relation->rel_symbol); |
| 1612 | |
| 1613 | // If the relation is defined as an external file, add dyn for that |
| 1614 | |
| 1615 | if (relation->rel_ext_file) |
| 1616 | put_cstring(request, isc_dyn_rel_ext_file, relation->rel_ext_file); |
| 1617 | |
| 1618 | put_numeric(request, isc_dyn_rel_sql_protection, 1); |
| 1619 | |
| 1620 | // add field info |
| 1621 | USHORT position = 0; |
| 1622 | for (const gpre_fld* field = relation->rel_fields; field; field = field->fld_next) |
| 1623 | { |
| 1624 | if (field->fld_global) |
| 1625 | { |
| 1626 | put_symbol(request, isc_dyn_def_local_fld, field->fld_symbol); |
| 1627 | put_symbol(request, isc_dyn_fld_source, field->fld_global); |
| 1628 | } |
| 1629 | else |
| 1630 | put_symbol(request, isc_dyn_def_sql_fld, field->fld_symbol); |
| 1631 | |
| 1632 | put_field_attributes(request, field); |
| 1633 | put_numeric(request, isc_dyn_fld_position, position++); |
| 1634 | |
| 1635 | if (field->fld_default_value) |
| 1636 | { |
| 1637 | put_blr(request, isc_dyn_fld_default_value, field->fld_default_value, CME_expr); |
| 1638 | TEXT* default_source = (TEXT*) MSC_alloc(field->fld_default_source->txt_length + 1); |
| 1639 | CPR_get_text(default_source, field->fld_default_source); |
| 1640 | put_cstring(request, isc_dyn_fld_default_source, default_source); |
| 1641 | } |
| 1642 | |
| 1643 | request->add_end(); |
| 1644 | if (field->fld_constraints) |
| 1645 | create_constraint(request, action, field->fld_constraints); |
| 1646 | } |
| 1647 | |
| 1648 | |
| 1649 | if (relation->rel_constraints) |
| 1650 | create_constraint(request, action, relation->rel_constraints); |
| 1651 | |
| 1652 | request->add_end(); |
| 1653 | |
| 1654 | // Need to create an index for any fields (columns) declared with the UNIQUE constraint. |
| 1655 | |
| 1656 | for (const gpre_fld* field = relation->rel_fields; field; field = field->fld_next) |
| 1657 | { |
| 1658 | if (field->fld_index) |
| 1659 | create_index(request, field->fld_index); |
| 1660 | } |
| 1661 | } |
| 1662 | |
| 1663 |
no test coverage detected