MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / create_table

Function create_table

src/gpre/cmd.cpp:1606–1661  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1604//
1605
1606static 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

Callers 1

CMD_compile_ddlFunction · 0.85

Calls 10

put_symbolFunction · 0.85
put_cstringFunction · 0.85
put_field_attributesFunction · 0.85
put_blrFunction · 0.85
MSC_allocFunction · 0.85
CPR_get_textFunction · 0.85
create_constraintFunction · 0.85
create_indexFunction · 0.85
add_endMethod · 0.80
put_numericFunction · 0.70

Tested by

no test coverage detected