MCPcopy Create free account
hub / github.com/apache/datafusion / create_external_table

Method create_external_table

datafusion/core/src/execution/context/mod.rs:818–866  ·  view source on GitHub ↗
(
        &self,
        cmd: &CreateExternalTable,
    )

Source from the content-addressed store, hash-verified

816 }
817
818 async fn create_external_table(
819 &self,
820 cmd: &CreateExternalTable,
821 ) -> Result<DataFrame> {
822 let exist = self.table_exist(cmd.name.clone())?;
823
824 if cmd.temporary {
825 return not_impl_err!("Temporary tables not supported");
826 }
827
828 match (cmd.if_not_exists, cmd.or_replace, exist) {
829 (true, false, true) => self.return_empty_dataframe(),
830 (false, true, true) => {
831 let result = self
832 .find_and_deregister(cmd.name.clone(), TableType::Base)
833 .await;
834
835 match result {
836 Ok(true) => {
837 let table_provider: Arc<dyn TableProvider> =
838 self.create_custom_table(cmd).await?;
839 self.register_table(cmd.name.clone(), table_provider)?;
840 self.return_empty_dataframe()
841 }
842 Ok(false) => {
843 let table_provider: Arc<dyn TableProvider> =
844 self.create_custom_table(cmd).await?;
845 self.register_table(cmd.name.clone(), table_provider)?;
846 self.return_empty_dataframe()
847 }
848 Err(e) => {
849 exec_err!("Errored while deregistering external table: {}", e)
850 }
851 }
852 }
853 (true, true, true) => {
854 exec_err!("'IF NOT EXISTS' cannot coexist with 'REPLACE'")
855 }
856 (_, _, false) => {
857 let table_provider: Arc<dyn TableProvider> =
858 self.create_custom_table(cmd).await?;
859 self.register_table(cmd.name.clone(), table_provider)?;
860 self.return_empty_dataframe()
861 }
862 (false, false, true) => {
863 exec_err!("External table '{}' already exists", cmd.name)
864 }
865 }
866 }
867
868 async fn create_memory_table(&self, cmd: CreateMemoryTable) -> Result<DataFrame> {
869 let CreateMemoryTable {

Callers 1

execute_logical_planMethod · 0.80

Calls 6

find_and_deregisterMethod · 0.80
create_custom_tableMethod · 0.80
table_existMethod · 0.45
cloneMethod · 0.45
register_tableMethod · 0.45

Tested by

no test coverage detected