@malloydata/malloy 0.0.22-dev230119001546 → 0.0.22-dev230119193053

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,5 @@
1
1
  import { By, ExpressionType } from "../../model/malloy_types";
2
- import { FieldSpace } from "../field-space";
3
- import { BinaryBoolean, ExpressionDef, ExprCompare, FieldName, FieldReference, Filter, MalloyElement } from "./ast-main";
2
+ import { BinaryBoolean, ExpressionDef, ExprCompare, FieldName, FieldReference, FieldSpace, Filter, MalloyElement } from "./ast-main";
4
3
  import { ExprValue, FieldValueType, FragType } from "./ast-types";
5
4
  export declare class ExprString extends ExpressionDef {
6
5
  elementType: string;
@@ -28,11 +28,9 @@ exports.Apply = exports.Pick = exports.PickWhen = exports.TopBy = exports.ExprCa
28
28
  ** evaluation.
29
29
  */
30
30
  const malloy_types_1 = require("../../model/malloy_types");
31
- const field_space_1 = require("../field-space");
32
31
  const ast_main_1 = require("./ast-main");
33
32
  const ast_types_1 = require("./ast-types");
34
33
  const apply_expr_1 = require("./apply-expr");
35
- const space_field_1 = require("../space-field");
36
34
  const time_utils_1 = require("./time-utils");
37
35
  class ExprString extends ast_main_1.ExpressionDef {
38
36
  constructor(src) {
@@ -154,7 +152,7 @@ class ExprIdReference extends ast_main_1.ExpressionDef {
154
152
  }
155
153
  apply(fs, op, expr) {
156
154
  const entry = this.fieldReference.getField(fs).found;
157
- if (entry instanceof space_field_1.SpaceParam) {
155
+ if (entry instanceof ast_main_1.SpaceParam) {
158
156
  const cParam = entry.parameter();
159
157
  if ((0, malloy_types_1.isConditionParameter)(cParam)) {
160
158
  const lval = expr.getExpression(fs);
@@ -306,7 +304,7 @@ class ExprAggregateFunction extends ast_main_1.ExpressionDef {
306
304
  structPath = this.source.sourceString;
307
305
  }
308
306
  else {
309
- if (!(sourceFoot instanceof space_field_1.StructSpaceField)) {
307
+ if (!(sourceFoot instanceof ast_main_1.StructSpaceField)) {
310
308
  this.log(`Aggregate source cannot be a ${footType.type}`);
311
309
  return (0, ast_types_1.errorFor)(`Aggregate source cannot be a ${footType.type}`);
312
310
  }
@@ -456,10 +454,10 @@ class ExprUngroup extends ast_main_1.ExpressionDef {
456
454
  if (this.typeCheck(this.expr, { ...exprVal, expressionType: "scalar" })) {
457
455
  if (this.fields.length > 0) {
458
456
  let qs = fs;
459
- if (fs instanceof field_space_1.DefSpace) {
457
+ if (fs instanceof ast_main_1.DefSpace) {
460
458
  qs = fs.realFS;
461
459
  }
462
- if (!(qs instanceof field_space_1.QuerySpace)) {
460
+ if (!(qs instanceof ast_main_1.QuerySpace)) {
463
461
  this.log(`${this.control}() must be in a query -- weird internal error`);
464
462
  return (0, ast_types_1.errorFor)("ungroup query check");
465
463
  }
@@ -1,8 +1,8 @@
1
1
  import * as model from "../../model/malloy_types";
2
+ import { Dialect } from "../../dialect/dialect";
2
3
  import { AtomicFieldType, ExpressionType, FieldTypeDef, Fragment, TimeFieldType, TimestampUnit } from "../../model/malloy_types";
3
- import { FieldSpace, QuerySpace, LookupResult } from "../field-space";
4
4
  import { MalloyTranslation, ModelDataRequest } from "../parse-malloy";
5
- import { Comparison, ExprValue } from "./ast-types";
5
+ import { Comparison, ExprValue, FieldValueType } from "./ast-types";
6
6
  export declare class ErrorFactory {
7
7
  static get structDef(): model.StructDef;
8
8
  static isErrorStructDef(s: model.StructDef): boolean;
@@ -658,4 +658,258 @@ export declare class Range extends ExpressionDef {
658
658
  requestExpression(_fs: FieldSpace): ExprValue | undefined;
659
659
  getExpression(_fs: FieldSpace): ExprValue;
660
660
  }
661
+ /**
662
+ * A FieldSpace is a hierarchy of namespaces, where the leaf nodes
663
+ * are fields. A FieldSpace can lookup fields, and generate a StructDef
664
+ */
665
+ export interface FieldSpace {
666
+ type: "fieldSpace";
667
+ structDef(): model.StructDef;
668
+ emptyStructDef(): model.StructDef;
669
+ lookup(symbol: FieldName[]): LookupResult;
670
+ dialectObj(): Dialect | undefined;
671
+ whenComplete: (step: () => void) => void;
672
+ }
673
+ /**
674
+ * Used to detect references to fields in the statement which defines them
675
+ */
676
+ export declare class DefSpace implements FieldSpace {
677
+ readonly realFS: FieldSpace;
678
+ readonly circular: FieldDeclaration;
679
+ readonly type = "fieldSpace";
680
+ foundCircle: boolean;
681
+ constructor(realFS: FieldSpace, circular: FieldDeclaration);
682
+ structDef(): model.StructDef;
683
+ emptyStructDef(): model.StructDef;
684
+ lookup(symbol: FieldName[]): LookupResult;
685
+ dialectObj(): Dialect | undefined;
686
+ whenComplete(step: () => void): void;
687
+ }
688
+ export declare class StaticSpace implements FieldSpace {
689
+ readonly type = "fieldSpace";
690
+ private memoMap?;
691
+ protected fromStruct: model.StructDef;
692
+ constructor(sourceStructDef: model.StructDef);
693
+ whenComplete(step: () => void): void;
694
+ dialectObj(): Dialect | undefined;
695
+ fromFieldDef(from: model.FieldDef): SpaceField;
696
+ private get map();
697
+ protected dropEntries(): void;
698
+ protected dropEntry(name: string): void;
699
+ protected entry(name: string): SpaceEntry | undefined;
700
+ protected setEntry(name: string, value: SpaceEntry): void;
701
+ protected entries(): [string, SpaceEntry][];
702
+ structDef(): model.StructDef;
703
+ emptyStructDef(): model.StructDef;
704
+ lookup(path: FieldName[]): LookupResult;
705
+ }
706
+ /**
707
+ * A FieldSpace which may undergo modification
708
+ */
709
+ export declare class DynamicSpace extends StaticSpace {
710
+ protected final: model.StructDef | undefined;
711
+ protected source: SpaceSeed;
712
+ outputFS?: QuerySpace;
713
+ completions: (() => void)[];
714
+ private complete;
715
+ constructor(extending: SourceSpec);
716
+ /**
717
+ * Factory for DynamicSpace when there are accept/except edits
718
+ * @param from A structdef which seeds this space
719
+ * @param choose A accept/except edit of the "from" fields
720
+ */
721
+ static filteredFrom(from: model.StructDef, choose?: FieldListEdit): DynamicSpace;
722
+ whenComplete(finalizeStep: () => void): void;
723
+ isComplete(): void;
724
+ protected setEntry(name: string, value: SpaceEntry): void;
725
+ addParameters(params: HasParameter[]): DynamicSpace;
726
+ newEntry(name: string, astEl: MalloyElement, entry: SpaceEntry): void;
727
+ addField(...defs: ExploreField[]): void;
728
+ addFieldDef(fd: model.FieldDef): void;
729
+ structDef(): model.StructDef;
730
+ }
731
+ export declare abstract class ResultSpace extends DynamicSpace {
732
+ readonly queryInputSpace: FieldSpace;
733
+ readonly exprSpace: QuerySpace;
734
+ astEl?: MalloyElement | undefined;
735
+ abstract readonly segmentType: "reduce" | "project" | "index";
736
+ constructor(queryInputSpace: FieldSpace);
737
+ log(s: string): void;
738
+ addMembers(members: FieldCollectionMember[]): void;
739
+ addReference(ref: FieldReference): void;
740
+ addWild(wild: WildcardFieldReference): void;
741
+ /**
742
+ * Check for the definition of an ungrouping reference in the result space,
743
+ * or in the case of an exclude reference, if this query is nested
744
+ * in another query, in the result space of a query that this query
745
+ * is nested inside of.
746
+ */
747
+ checkUngroup(fn: FieldName, isExclude: boolean): void;
748
+ addQueryItems(...qiList: QueryItem[]): void;
749
+ canContain(_qd: model.QueryFieldDef): boolean;
750
+ protected queryFieldDefs(): model.QueryFieldDef[];
751
+ getQuerySegment(rf: model.QuerySegment | undefined): model.QuerySegment;
752
+ getPipeSegment(refineFrom: model.QuerySegment | undefined): model.PipeSegment;
753
+ }
754
+ /**
755
+ * Reduce and project queries use a "QuerySpace"
756
+ */
757
+ export declare class ReduceFieldSpace extends ResultSpace {
758
+ readonly segmentType = "reduce";
759
+ }
760
+ export declare class ProjectFieldSpace extends ResultSpace {
761
+ readonly segmentType = "project";
762
+ canContain(qd: model.QueryFieldDef): boolean;
763
+ }
764
+ export declare abstract class SpaceEntry {
765
+ abstract type(): FieldType;
766
+ abstract refType: "field" | "parameter";
767
+ }
768
+ export declare abstract class SpaceField extends SpaceEntry {
769
+ readonly refType = "field";
770
+ protected fieldTypeFromFieldDef(def: model.FieldDef): FieldType;
771
+ getQueryFieldDef(_fs: FieldSpace): model.QueryFieldDef | undefined;
772
+ fieldDef(): model.FieldDef | undefined;
773
+ }
774
+ export interface FieldType {
775
+ type: FieldValueType;
776
+ expressionType?: model.ExpressionType;
777
+ }
778
+ export declare class StructSpaceField extends SpaceField {
779
+ protected sourceDef: model.StructDef;
780
+ protected space?: FieldSpace;
781
+ constructor(sourceDef: model.StructDef);
782
+ get fieldSpace(): FieldSpace;
783
+ fieldDef(): model.FieldDef;
784
+ type(): FieldType;
785
+ }
786
+ export declare abstract class QueryField extends SpaceField {
787
+ protected inSpace: FieldSpace;
788
+ constructor(inSpace: FieldSpace);
789
+ abstract getQueryFieldDef(fs: FieldSpace): model.QueryFieldDef | undefined;
790
+ abstract fieldDef(): model.FieldDef;
791
+ type(): FieldType;
792
+ }
793
+ export declare class QueryFieldStruct extends QueryField {
794
+ protected turtleDef: model.TurtleDef;
795
+ constructor(fs: FieldSpace, turtleDef: model.TurtleDef);
796
+ rename(name: string): void;
797
+ fieldDef(): model.TurtleDef;
798
+ getQueryFieldDef(_fs: FieldSpace): model.QueryFieldDef | undefined;
799
+ }
800
+ export declare class ColumnSpaceField extends SpaceField {
801
+ protected def: model.FieldTypeDef;
802
+ constructor(def: model.FieldTypeDef);
803
+ fieldDef(): model.FieldDef;
804
+ type(): FieldType;
805
+ }
806
+ export declare abstract class SpaceParam extends SpaceEntry {
807
+ abstract parameter(): model.Parameter;
808
+ readonly refType = "parameter";
809
+ }
810
+ export declare class DefinedParameter extends SpaceParam {
811
+ readonly paramDef: model.Parameter;
812
+ constructor(paramDef: model.Parameter);
813
+ parameter(): model.Parameter;
814
+ type(): FieldType;
815
+ }
816
+ /**
817
+ * Based on how things are constructed, the starting field space
818
+ * can either be another field space or an existing structdef.
819
+ * Using a SpaceSeed allows a class to accept either one
820
+ * and use either version at some future time.
821
+ */
822
+ export declare class SpaceSeed {
823
+ readonly sourceSpec: SourceSpec;
824
+ private spaceSpec;
825
+ private asFS?;
826
+ private asStruct?;
827
+ constructor(sourceSpec: SourceSpec);
828
+ get structDef(): model.StructDef;
829
+ get fieldSpace(): FieldSpace;
830
+ }
831
+ export declare type SourceSpec = model.StructDef | FieldSpace;
832
+ export declare class AbstractParameter extends SpaceParam {
833
+ readonly astParam: HasParameter;
834
+ constructor(astParam: HasParameter);
835
+ parameter(): model.Parameter;
836
+ type(): FieldType;
837
+ }
838
+ export declare class ExpressionFieldFromAst extends SpaceField {
839
+ readonly space: DynamicSpace;
840
+ readonly exprDef: FieldDeclaration;
841
+ fieldName: string;
842
+ defType?: FieldType;
843
+ constructor(space: DynamicSpace, exprDef: FieldDeclaration);
844
+ get name(): string;
845
+ fieldDef(): model.FieldDef;
846
+ getQueryFieldDef(fs: FieldSpace): model.QueryFieldDef;
847
+ type(): FieldType;
848
+ }
849
+ export declare class QueryFieldAST extends QueryField {
850
+ readonly turtle: TurtleDecl;
851
+ protected name: string;
852
+ renameAs?: string;
853
+ nestParent?: QuerySpace;
854
+ constructor(fs: FieldSpace, turtle: TurtleDecl, name: string);
855
+ getQueryFieldDef(fs: FieldSpace): model.QueryFieldDef;
856
+ fieldDef(): model.TurtleDef;
857
+ }
858
+ export declare class RenameSpaceField extends SpaceField {
859
+ private readonly otherField;
860
+ private readonly newName;
861
+ private readonly location;
862
+ constructor(otherField: SpaceField, newName: string, location: model.DocumentLocation);
863
+ fieldDef(): model.FieldDef | undefined;
864
+ type(): FieldType;
865
+ }
866
+ export declare class JoinSpaceField extends StructSpaceField {
867
+ readonly intoFS: FieldSpace;
868
+ readonly join: Join;
869
+ constructor(intoFS: FieldSpace, join: Join);
870
+ }
871
+ /**
872
+ * Unlike a source, which is a refinement of a namespace, a query
873
+ * is creating a new unrelated namespace. The query starts with a
874
+ * source, which it might modify. This set of fields used to resolve
875
+ * expressions in the query is called the "input space". There is a
876
+ * specialized QuerySpace for each type of query operation.
877
+ *
878
+ * The query output is managed by an instance of ResultSpace.
879
+ */
880
+ export declare class QuerySpace extends DynamicSpace {
881
+ readonly result: ResultSpace;
882
+ nestParent?: QuerySpace;
883
+ extendList: string[];
884
+ constructor(input: SourceSpec, result: ResultSpace);
885
+ extendSource(extendField: Join | FieldDeclaration): void;
886
+ }
887
+ export declare class ReferenceField extends SpaceField {
888
+ readonly fieldRef: FieldReference;
889
+ constructor(fieldRef: FieldReference);
890
+ getQueryFieldDef(fs: FieldSpace): model.QueryFieldDef | undefined;
891
+ type(): FieldType;
892
+ }
893
+ export declare class WildSpaceField extends SpaceField {
894
+ readonly wildText: string;
895
+ constructor(wildText: string);
896
+ type(): FieldType;
897
+ getQueryFieldDef(_fs: FieldSpace): model.QueryFieldDef;
898
+ }
899
+ interface LookupFound {
900
+ found: SpaceEntry;
901
+ error: undefined;
902
+ }
903
+ interface LookupError {
904
+ error: string;
905
+ found: undefined;
906
+ }
907
+ export declare type LookupResult = LookupFound | LookupError;
908
+ export declare class IndexFieldSpace extends ResultSpace {
909
+ readonly segmentType = "index";
910
+ fieldList: Set<string>;
911
+ addReference(ref: FieldReference): void;
912
+ addWild(wild: WildcardFieldReference): void;
913
+ getPipeSegment(refineIndex?: model.PipeSegment): model.IndexSegment;
914
+ }
661
915
  export {};