export interface EnumValue { name: string; value: number; } export interface EnumDefinition { kind: "Enum"; name: string; values: Array; } export interface MessageFieldDefinition { name: string; type: string; index: number; isArray?: true; import?: string; deprecated?: true; } export interface DatastoreFilterTemplate { fieldName: string; operator: string; } export interface DatastoreOrdering { fieldName: string; descending: boolean; } export interface DatastoreQueryTemplate { name: string; filters?: Array; orderings?: Array; } export interface DatastoreDefinition { output: string; key: string; queries?: Array; } export interface MessageDefinition { kind: "Message"; name: string; fields: Array; } export interface ServiceDefinition { kind: "Service"; name: string; path: string; } export interface KeyValueParamDefinition { key: string; type: string; import?: string; } export interface RemoteCallDefinition { name: string; path: string; body: string; importBody?: string; authKey?: string; metadata?: KeyValueParamDefinition; response: string; importResponse?: string; } export interface RemoteCallsGroupDefinition { kind: "RemoteCallsGroup"; name: string; service: string; importService?: string; path?: string; calls: Array; outputClient: string; outputHandler: string; } export interface SpannerTableColumnType { type: string; import?: string; isArray?: true; nullable?: true; } export interface SpannerTableColumnDefinition extends SpannerTableColumnType { name: string; } export interface SpannerTableColumnGroupDefinition { name: string; columns: Array; } export interface SpannerTableSearchColumnDefinition { name: string; columnRefs: Array; } export interface SpannerIndexColumnDefinition { name: string; desc: boolean; } export interface SpannerTablePrimaryKeyDefinition { name: string; desc: boolean; } export interface SpannerTableInterleaveDefinition { parentTable: string; cascadeOnDelete?: true; } export interface SpannerIndexDefinition { name: string; columns: Array; unique?: true; nullFiltered?: true; } export interface SpannerSearchIndexOrderByDefinition { name: string; desc: boolean; } export interface SpannerSearchIndexDefinition { name: string; columns: Array; partitionByColumns?: Array; orderByColumns?: Array; } export interface SpannerTableDefinition { kind: "Table"; name: string; columns: Array; columnGroups?: Array; searchColumns?: Array; primaryKeys: Array; interleave?: SpannerTableInterleaveDefinition; indexes?: Array; searchIndexes?: Array; insert?: string; delete?: string; get?: string; update?: string; } export interface SpannerTaskTableDefinition { kind: "TaskTable"; name: string; columns: Array; retryCountColumn: string; executionTimeColumn: string; createdTimeColumn: string; primaryKeys: Array; indexes?: Array; executionTimeIndex: string; insert: string; delete: string; get: string; listPendingTasks: string; getMetadata: string; updateMetadata: string; } export interface SpannerJoinOnLeaf { lColumn?: string; lTable?: string; lVar?: string; op: ">" | "<" | ">=" | "<=" | "!=" | "="; rColumn: string; } export interface SpannerJoinOnConcat { op: "AND" | "OR"; exprs: Array; } export interface SpannerJoin { type: "INNER" | "CROSS" | "FULL" | "LEFT" | "RIGHT"; with: string; as?: string; on?: SpannerJoinOnConcat | SpannerJoinOnLeaf; } export interface SpannerWhereLeaf { lColumn: string; lTable?: string; func?: "SCORE"; op: ">" | "<" | ">=" | "<=" | "!=" | "=" | "IS NULL" | "IS NOT NULL" | "SEARCH" | "IN"; rVar?: string; } export interface SpannerWhereConcat { op: "AND" | "OR"; exprs: Array; } export interface SpannerOrderByExpr { column: string; table?: string; func?: "SCORE"; desc?: true; } export interface SpannerGetColumnExpr { column?: string; func?: "SCORE"; all?: true; columnGroup?: string; table?: string; } export interface SpannerSelectDefinition { name: string; from: string; as?: string; join?: Array; where?: SpannerWhereConcat | SpannerWhereLeaf; orderBy?: Array; withLimit?: boolean; withOffset?: boolean; get: Array; } export interface SpannerInsertDefinition { name: string; table: string; set: Array; onConflict?: "IGNORE" | "UPDATE"; } export interface SpannerUpdateDefinition { name: string; table: string; set: Array; where: SpannerWhereConcat | SpannerWhereLeaf; } export interface SpannerDeleteDefinition { name: string; table: string; where: SpannerWhereConcat | SpannerWhereLeaf; } export interface SpannerDatabaseDefinition { kind: "SpannerDatabase"; name: string; tables?: Array; selects?: Array; inserts?: Array; updates?: Array; deletes?: Array; outputDdl: string; outputSql: string; } export type Definition = EnumDefinition | MessageDefinition | ServiceDefinition | RemoteCallsGroupDefinition | SpannerDatabaseDefinition;