#![deny(missing_docs)]
#![doc = include_str!("lib.md")]
mod analyze_query;
mod collection_management;
mod describe_table;
mod initialize_schema;
mod list_objects;
pub use self::{
analyze_query::{
AnalyzeQueryArgs, AnalyzeQueryInput, AnalyzeQueryItem, AnalyzeQueryResponse, ColumnAccess,
ColumnAccessKind, ParameterDescribe, QueryKind, ResultSetColumn,
},
collection_management::{
Collection, CollectionHandle, ReadCollectionArgs, ReleaseCollectionArgs,
},
describe_table::{
ColumnConstraint, ColumnDefinition, DescribeTableArgs, DescribeTableResponse,
TableConstraint,
},
initialize_schema::{
EngineDialect, EngineVersion, ExtensionSpec, InitializeSchemaArgs, SchemaContext,
},
list_objects::{
ListObjectArgs, NameQuery, ObjectKind, ObjectQuery, ObjectSummary, ObjectSummaryField,
StringPred,
},
};
use std::path::PathBuf;
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(transparent)]
pub struct ContextHandle(String);
#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
pub struct TextPosition {
offset: usize,
line: u32,
col: u32,
}
#[cfg(test)]
mod test_text_position {
use testresult::TestResult;
use crate::TextPosition;
#[test]
fn test_serialize() -> TestResult {
let item = TextPosition {
offset: 0,
line: 1,
col: 2,
};
let json_string = serde_json::to_string(&item)?;
assert_eq!(&json_string, r#"{"offset":0,"line":1,"col":2}"#);
Ok(())
}
}
#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
pub struct TextSpan {
from: TextPosition,
to: TextPosition,
}
#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
pub struct AnalysisProbrem {
code: String,
file_path: PathBuf,
statement_span: TextSpan,
probrem_span: TextSpan,
}
#[derive(thiserror::Error, Debug, serde::Serialize, serde::Deserialize)]
pub enum SqlFunServerApiError {
#[error("require release collection {0:?}")]
RequireReleseCollection(Vec<CollectionHandle>),
}
#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
pub struct TypeReference {
schema_name: String,
local_name: String,
}
#[derive(serde::Serialize, serde::Deserialize)]
pub enum Nullability {
NotNull,
Nullable,
Unknown,
}
#[async_trait::async_trait]
pub trait SqlFunServerApi {
async fn initialize_schema_context(
&self,
args: InitializeSchemaArgs,
) -> Result<SchemaContext, SqlFunServerApiError>;
async fn read_collection(
&self,
args: ReadCollectionArgs,
) -> Result<serde_json::Value, SqlFunServerApiError>;
async fn release_collection(
&self,
args: ReleaseCollectionArgs,
) -> Result<(), SqlFunServerApiError>;
async fn analyze_query(
&self,
args: AnalyzeQueryArgs,
) -> Result<AnalyzeQueryResponse, SqlFunServerApiError>;
async fn list_objects(
&self,
args: ListObjectArgs,
) -> Result<Collection<ObjectSummary>, SqlFunServerApiError>;
async fn describe_table(
&self,
args: DescribeTableArgs,
) -> Result<DescribeTableResponse, SqlFunServerApiError>;
}