MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / add_column

Method add_column

src/repr/src/relation.rs:1709–1742  ·  view source on GitHub ↗
(&mut self, name: N, typ: T)

Source from the content-addressed store, hash-verified

1707 /// Note: For building a [`RelationDesc`] see [`RelationDescBuilder::with_column`].
1708 #[must_use]
1709 pub fn add_column<N, T>(&mut self, name: N, typ: T) -> RelationVersion
1710 where
1711 N: Into<ColumnName>,
1712 T: Into<SqlColumnType>,
1713 {
1714 let latest_version = self.latest_version();
1715 let new_version = latest_version.bump();
1716
1717 let name = name.into();
1718 let existing = self
1719 .inner
1720 .metadata
1721 .iter()
1722 .find(|(_, meta)| meta.name == name && meta.dropped.is_none());
1723 if let Some(existing) = existing {
1724 panic!("column named '{name}' already exists! {existing:?}");
1725 }
1726
1727 let next_idx = self.inner.metadata.len();
1728 let col_meta = ColumnMetadata {
1729 name,
1730 typ_idx: next_idx,
1731 added: new_version,
1732 dropped: None,
1733 };
1734
1735 self.inner.typ.column_types.push(typ.into());
1736 let prev = self.inner.metadata.insert(ColumnIndex(next_idx), col_meta);
1737
1738 assert_none!(prev, "column index overlap!");
1739 self.validate();
1740
1741 new_version
1742 }
1743
1744 /// Drops the column `name` from this [`RelationDesc`]. If there are multiple columns with
1745 /// `name` drops the left-most one that hasn't already been dropped.

Callers 5

plan_create_tableFunction · 0.45
smoktest_at_versionFunction · 0.45
transact_opMethod · 0.45

Calls 10

ColumnIndexClass · 0.85
is_noneMethod · 0.80
latest_versionMethod · 0.45
bumpMethod · 0.45
findMethod · 0.45
iterMethod · 0.45
lenMethod · 0.45
pushMethod · 0.45
insertMethod · 0.45
validateMethod · 0.45