├── .gitignore ├── LICENSE ├── README.md ├── build.gradle.kts ├── docs ├── MiniDB - Architecture.drawio └── MiniDB - Architecture.png ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle.kts └── src ├── main ├── java │ └── miniDB │ │ ├── ExampleAPI.java │ │ ├── index │ │ └── BPTree.java │ │ └── parser │ │ ├── ast │ │ ├── ASTNode.java │ │ ├── expression │ │ │ ├── AbstractExpression.java │ │ │ ├── BinaryOperatorExpression.java │ │ │ ├── Expression.java │ │ │ ├── PolyadicOperatorExpression.java │ │ │ ├── ReplacableExpression.java │ │ │ ├── TernaryOperatorExpression.java │ │ │ ├── UnaryOperatorExpression.java │ │ │ ├── arithmeic │ │ │ │ ├── ArithmeticAddExpression.java │ │ │ │ ├── ArithmeticBinaryOperatorExpression.java │ │ │ │ ├── ArithmeticDivideExpression.java │ │ │ │ ├── ArithmeticIntegerDivideExpression.java │ │ │ │ ├── ArithmeticModExpression.java │ │ │ │ ├── ArithmeticMultiplyExpression.java │ │ │ │ ├── ArithmeticSubtractExpression.java │ │ │ │ └── MinusExpression.java │ │ │ ├── bit │ │ │ │ ├── BitAndExpression.java │ │ │ │ ├── BitInvertExpression.java │ │ │ │ ├── BitOrExpression.java │ │ │ │ ├── BitShiftExpression.java │ │ │ │ └── BitXORExpression.java │ │ │ ├── comparison │ │ │ │ ├── BetweenAndExpression.java │ │ │ │ ├── ComparisionEqualsExpression.java │ │ │ │ ├── ComparisionGreaterThanExpression.java │ │ │ │ ├── ComparisionGreaterThanOrEqualsExpression.java │ │ │ │ ├── ComparisionIsExpression.java │ │ │ │ ├── ComparisionLessOrGreaterThanExpression.java │ │ │ │ ├── ComparisionLessThanExpression.java │ │ │ │ ├── ComparisionLessThanOrEqualsExpression.java │ │ │ │ ├── ComparisionNotEqualsExpression.java │ │ │ │ ├── ComparisionNullSafeEqualsExpression.java │ │ │ │ └── InExpression.java │ │ │ ├── logical │ │ │ │ ├── LogicalAndExpression.java │ │ │ │ ├── LogicalNotExpression.java │ │ │ │ ├── LogicalOrExpression.java │ │ │ │ ├── LogicalXORExpression.java │ │ │ │ └── NegativeValueExpression.java │ │ │ ├── misc │ │ │ │ ├── AssignmentExpression.java │ │ │ │ ├── InExpressionList.java │ │ │ │ ├── QueryExpression.java │ │ │ │ ├── SubqueryAllExpression.java │ │ │ │ ├── SubqueryAnyExpression.java │ │ │ │ └── UserExpression.java │ │ │ ├── primary │ │ │ │ ├── CaseWhenOperatorExpression.java │ │ │ │ ├── DefaultValue.java │ │ │ │ ├── ExistsPrimary.java │ │ │ │ ├── Identifier.java │ │ │ │ ├── MatchExpression.java │ │ │ │ ├── NewRowPrimary.java │ │ │ │ ├── OldRowPrimary.java │ │ │ │ ├── ParamMarker.java │ │ │ │ ├── PlaceHolder.java │ │ │ │ ├── PrimaryExpression.java │ │ │ │ ├── RowExpression.java │ │ │ │ ├── SysVarPrimary.java │ │ │ │ ├── UsrDefVarPrimary.java │ │ │ │ ├── VariableExpression.java │ │ │ │ ├── Wildcard.java │ │ │ │ ├── function │ │ │ │ │ ├── DefaultFunction.java │ │ │ │ │ ├── FunctionExpression.java │ │ │ │ │ ├── arithmetic │ │ │ │ │ │ ├── Abs.java │ │ │ │ │ │ ├── Acos.java │ │ │ │ │ │ ├── Asin.java │ │ │ │ │ │ ├── Atan.java │ │ │ │ │ │ ├── Atan2.java │ │ │ │ │ │ ├── Ceiling.java │ │ │ │ │ │ ├── Conv.java │ │ │ │ │ │ ├── Cos.java │ │ │ │ │ │ ├── Cot.java │ │ │ │ │ │ ├── Crc32.java │ │ │ │ │ │ ├── Degrees.java │ │ │ │ │ │ ├── Exp.java │ │ │ │ │ │ ├── Floor.java │ │ │ │ │ │ ├── Log.java │ │ │ │ │ │ ├── Log10.java │ │ │ │ │ │ ├── Log2.java │ │ │ │ │ │ ├── Oct.java │ │ │ │ │ │ ├── Pi.java │ │ │ │ │ │ ├── Pow.java │ │ │ │ │ │ ├── Radians.java │ │ │ │ │ │ ├── Rand.java │ │ │ │ │ │ ├── Round.java │ │ │ │ │ │ ├── Sign.java │ │ │ │ │ │ ├── Sin.java │ │ │ │ │ │ ├── Sqrt.java │ │ │ │ │ │ ├── Tan.java │ │ │ │ │ │ └── Truncate.java │ │ │ │ │ ├── bit │ │ │ │ │ │ └── BitCount.java │ │ │ │ │ ├── cast │ │ │ │ │ │ ├── Cast.java │ │ │ │ │ │ └── Convert.java │ │ │ │ │ ├── comparison │ │ │ │ │ │ ├── Coalesce.java │ │ │ │ │ │ ├── Greatest.java │ │ │ │ │ │ ├── Interval.java │ │ │ │ │ │ ├── Isnull.java │ │ │ │ │ │ └── Least.java │ │ │ │ │ ├── datetime │ │ │ │ │ │ ├── Adddate.java │ │ │ │ │ │ ├── Addtime.java │ │ │ │ │ │ ├── ConvertTz.java │ │ │ │ │ │ ├── CurTimestamp.java │ │ │ │ │ │ ├── Curdate.java │ │ │ │ │ │ ├── Curtime.java │ │ │ │ │ │ ├── Date.java │ │ │ │ │ │ ├── DateAdd.java │ │ │ │ │ │ ├── DateFormat.java │ │ │ │ │ │ ├── DateSub.java │ │ │ │ │ │ ├── Datediff.java │ │ │ │ │ │ ├── Dayname.java │ │ │ │ │ │ ├── Dayofmonth.java │ │ │ │ │ │ ├── Dayofweek.java │ │ │ │ │ │ ├── Dayofyear.java │ │ │ │ │ │ ├── Extract.java │ │ │ │ │ │ ├── FromDays.java │ │ │ │ │ │ ├── FromUnixtime.java │ │ │ │ │ │ ├── GetFormat.java │ │ │ │ │ │ ├── Hour.java │ │ │ │ │ │ ├── LastDay.java │ │ │ │ │ │ ├── Makedate.java │ │ │ │ │ │ ├── Maketime.java │ │ │ │ │ │ ├── Microsecond.java │ │ │ │ │ │ ├── Minute.java │ │ │ │ │ │ ├── Month.java │ │ │ │ │ │ ├── Monthname.java │ │ │ │ │ │ ├── Now.java │ │ │ │ │ │ ├── PeriodAdd.java │ │ │ │ │ │ ├── PeriodDiff.java │ │ │ │ │ │ ├── Quarter.java │ │ │ │ │ │ ├── SecToTime.java │ │ │ │ │ │ ├── Second.java │ │ │ │ │ │ ├── StrToDate.java │ │ │ │ │ │ ├── Subdate.java │ │ │ │ │ │ ├── Subtime.java │ │ │ │ │ │ ├── Sysdate.java │ │ │ │ │ │ ├── Time.java │ │ │ │ │ │ ├── TimeFormat.java │ │ │ │ │ │ ├── TimeToSec.java │ │ │ │ │ │ ├── Timediff.java │ │ │ │ │ │ ├── Timestamp.java │ │ │ │ │ │ ├── Timestampadd.java │ │ │ │ │ │ ├── Timestampdiff.java │ │ │ │ │ │ ├── ToDays.java │ │ │ │ │ │ ├── ToSeconds.java │ │ │ │ │ │ ├── UnixTimestamp.java │ │ │ │ │ │ ├── UtcDate.java │ │ │ │ │ │ ├── UtcTime.java │ │ │ │ │ │ ├── UtcTimestamp.java │ │ │ │ │ │ ├── Week.java │ │ │ │ │ │ ├── Weekday.java │ │ │ │ │ │ ├── Weekofyear.java │ │ │ │ │ │ ├── Year.java │ │ │ │ │ │ └── Yearweek.java │ │ │ │ │ ├── encryption │ │ │ │ │ │ ├── AesDecrypt.java │ │ │ │ │ │ ├── AesEncrypt.java │ │ │ │ │ │ ├── Compress.java │ │ │ │ │ │ ├── Decode.java │ │ │ │ │ │ ├── DesDecrypt.java │ │ │ │ │ │ ├── DesEncrypt.java │ │ │ │ │ │ ├── Encode.java │ │ │ │ │ │ ├── Encrypt.java │ │ │ │ │ │ ├── Md5.java │ │ │ │ │ │ ├── OldPassword.java │ │ │ │ │ │ ├── Password.java │ │ │ │ │ │ ├── Sha1.java │ │ │ │ │ │ ├── Sha2.java │ │ │ │ │ │ ├── Uncompress.java │ │ │ │ │ │ └── UncompressedLength.java │ │ │ │ │ ├── flowctrl │ │ │ │ │ │ ├── If.java │ │ │ │ │ │ ├── Ifnull.java │ │ │ │ │ │ └── Nullif.java │ │ │ │ │ ├── groupby │ │ │ │ │ │ ├── Avg.java │ │ │ │ │ │ ├── BitAnd.java │ │ │ │ │ │ ├── BitOr.java │ │ │ │ │ │ ├── BitXor.java │ │ │ │ │ │ ├── Count.java │ │ │ │ │ │ ├── GroupConcat.java │ │ │ │ │ │ ├── Max.java │ │ │ │ │ │ ├── Min.java │ │ │ │ │ │ ├── Std.java │ │ │ │ │ │ ├── Stddev.java │ │ │ │ │ │ ├── StddevPop.java │ │ │ │ │ │ ├── StddevSamp.java │ │ │ │ │ │ ├── Sum.java │ │ │ │ │ │ ├── VarPop.java │ │ │ │ │ │ ├── VarSamp.java │ │ │ │ │ │ └── Variance.java │ │ │ │ │ ├── info │ │ │ │ │ │ ├── Benchmark.java │ │ │ │ │ │ ├── Charset.java │ │ │ │ │ │ ├── Coercibility.java │ │ │ │ │ │ ├── Collation.java │ │ │ │ │ │ ├── ConnectionId.java │ │ │ │ │ │ ├── CurrentUser.java │ │ │ │ │ │ ├── Database.java │ │ │ │ │ │ ├── FoundRows.java │ │ │ │ │ │ ├── LastInsertId.java │ │ │ │ │ │ ├── RowCount.java │ │ │ │ │ │ ├── User.java │ │ │ │ │ │ └── Version.java │ │ │ │ │ ├── misc │ │ │ │ │ │ ├── Analyse.java │ │ │ │ │ │ ├── Default.java │ │ │ │ │ │ ├── GetLock.java │ │ │ │ │ │ ├── InetAton.java │ │ │ │ │ │ ├── InetNtoa.java │ │ │ │ │ │ ├── IsFreeLock.java │ │ │ │ │ │ ├── IsUsedLock.java │ │ │ │ │ │ ├── MasterPosWait.java │ │ │ │ │ │ ├── NameConst.java │ │ │ │ │ │ ├── ReleaseLock.java │ │ │ │ │ │ ├── Sleep.java │ │ │ │ │ │ ├── Uuid.java │ │ │ │ │ │ ├── UuidShort.java │ │ │ │ │ │ └── Values.java │ │ │ │ │ ├── spatial │ │ │ │ │ │ ├── Area.java │ │ │ │ │ │ ├── AsBinary.java │ │ │ │ │ │ ├── AsText.java │ │ │ │ │ │ ├── AsWKB.java │ │ │ │ │ │ ├── AsWKT.java │ │ │ │ │ │ ├── Buffer.java │ │ │ │ │ │ ├── Centroid.java │ │ │ │ │ │ ├── Contains.java │ │ │ │ │ │ ├── Crosses.java │ │ │ │ │ │ ├── Dimension.java │ │ │ │ │ │ ├── Disjoint.java │ │ │ │ │ │ ├── EndPoint.java │ │ │ │ │ │ ├── Envelope.java │ │ │ │ │ │ ├── Equals.java │ │ │ │ │ │ ├── ExteriorRing.java │ │ │ │ │ │ ├── GLength.java │ │ │ │ │ │ ├── GeomCollFromText.java │ │ │ │ │ │ ├── GeomCollFromWKB.java │ │ │ │ │ │ ├── GeomFromText.java │ │ │ │ │ │ ├── GeomFromWKB.java │ │ │ │ │ │ ├── GeometryCollection.java │ │ │ │ │ │ ├── GeometryCollectionFromText.java │ │ │ │ │ │ ├── GeometryCollectionFromWKB.java │ │ │ │ │ │ ├── GeometryFromText.java │ │ │ │ │ │ ├── GeometryN.java │ │ │ │ │ │ ├── GeometryType.java │ │ │ │ │ │ ├── InteriorRingN.java │ │ │ │ │ │ ├── Intersects.java │ │ │ │ │ │ ├── IsClosed.java │ │ │ │ │ │ ├── IsEmpty.java │ │ │ │ │ │ ├── IsSimple.java │ │ │ │ │ │ ├── LineFromText.java │ │ │ │ │ │ ├── LineFromWKB.java │ │ │ │ │ │ ├── LineString.java │ │ │ │ │ │ ├── LineStringFromWKB.java │ │ │ │ │ │ ├── MBRContains.java │ │ │ │ │ │ ├── MBRDisjoint.java │ │ │ │ │ │ ├── MBREqual.java │ │ │ │ │ │ ├── MBRIntersects.java │ │ │ │ │ │ ├── MBROverlaps.java │ │ │ │ │ │ ├── MBRTouches.java │ │ │ │ │ │ ├── MBRWithin.java │ │ │ │ │ │ ├── MLineFromText.java │ │ │ │ │ │ ├── MLineFromWKB.java │ │ │ │ │ │ ├── MPointFromText.java │ │ │ │ │ │ ├── MPointFromWKB.java │ │ │ │ │ │ ├── MPolyFromText.java │ │ │ │ │ │ ├── MPolyFromWKB.java │ │ │ │ │ │ ├── MultiLineString.java │ │ │ │ │ │ ├── MultiLineStringFromText.java │ │ │ │ │ │ ├── MultiLineStringFromWKB.java │ │ │ │ │ │ ├── MultiPoint.java │ │ │ │ │ │ ├── MultiPointFromText.java │ │ │ │ │ │ ├── MultiPointFromWKB.java │ │ │ │ │ │ ├── MultiPolygon.java │ │ │ │ │ │ ├── MultiPolygonFromText.java │ │ │ │ │ │ ├── MultiPolygonFromWKB.java │ │ │ │ │ │ ├── NumGeometries.java │ │ │ │ │ │ ├── NumInteriorRings.java │ │ │ │ │ │ ├── NumPoints.java │ │ │ │ │ │ ├── Overlaps.java │ │ │ │ │ │ ├── Point.java │ │ │ │ │ │ ├── PointFromText.java │ │ │ │ │ │ ├── PointFromWKB.java │ │ │ │ │ │ ├── PointN.java │ │ │ │ │ │ ├── PolyFromText.java │ │ │ │ │ │ ├── PolyFromWKB.java │ │ │ │ │ │ ├── Polygon.java │ │ │ │ │ │ ├── PolygonFromText.java │ │ │ │ │ │ ├── PolygonFromWKB.java │ │ │ │ │ │ ├── SRID.java │ │ │ │ │ │ ├── ST_Area.java │ │ │ │ │ │ ├── ST_Centroid.java │ │ │ │ │ │ ├── ST_Contains.java │ │ │ │ │ │ ├── ST_Crosses.java │ │ │ │ │ │ ├── ST_Difference.java │ │ │ │ │ │ ├── ST_Disjoint.java │ │ │ │ │ │ ├── ST_Distance.java │ │ │ │ │ │ ├── ST_Envelope.java │ │ │ │ │ │ ├── ST_Equals.java │ │ │ │ │ │ ├── ST_Intersection.java │ │ │ │ │ │ ├── ST_Intersects.java │ │ │ │ │ │ ├── ST_Overlaps.java │ │ │ │ │ │ ├── ST_SymDifference.java │ │ │ │ │ │ ├── ST_Touches.java │ │ │ │ │ │ ├── ST_Union.java │ │ │ │ │ │ ├── ST_Within.java │ │ │ │ │ │ ├── StartPoint.java │ │ │ │ │ │ ├── Touches.java │ │ │ │ │ │ ├── Within.java │ │ │ │ │ │ ├── X.java │ │ │ │ │ │ └── Y.java │ │ │ │ │ ├── string │ │ │ │ │ │ ├── Ascii.java │ │ │ │ │ │ ├── Bin.java │ │ │ │ │ │ ├── BitLength.java │ │ │ │ │ │ ├── Char.java │ │ │ │ │ │ ├── CharLength.java │ │ │ │ │ │ ├── Concat.java │ │ │ │ │ │ ├── ConcatWs.java │ │ │ │ │ │ ├── Elt.java │ │ │ │ │ │ ├── ExportSet.java │ │ │ │ │ │ ├── Field.java │ │ │ │ │ │ ├── FindInSet.java │ │ │ │ │ │ ├── Format.java │ │ │ │ │ │ ├── Hex.java │ │ │ │ │ │ ├── Insert.java │ │ │ │ │ │ ├── Instr.java │ │ │ │ │ │ ├── Left.java │ │ │ │ │ │ ├── Length.java │ │ │ │ │ │ ├── LoadFile.java │ │ │ │ │ │ ├── Locate.java │ │ │ │ │ │ ├── Lower.java │ │ │ │ │ │ ├── Lpad.java │ │ │ │ │ │ ├── Ltrim.java │ │ │ │ │ │ ├── MakeSet.java │ │ │ │ │ │ ├── Ord.java │ │ │ │ │ │ ├── Quote.java │ │ │ │ │ │ ├── Repeat.java │ │ │ │ │ │ ├── Replace.java │ │ │ │ │ │ ├── Reverse.java │ │ │ │ │ │ ├── Right.java │ │ │ │ │ │ ├── Rpad.java │ │ │ │ │ │ ├── Rtrim.java │ │ │ │ │ │ ├── Soundex.java │ │ │ │ │ │ ├── Space.java │ │ │ │ │ │ ├── Strcmp.java │ │ │ │ │ │ ├── Substring.java │ │ │ │ │ │ ├── SubstringIndex.java │ │ │ │ │ │ ├── Trim.java │ │ │ │ │ │ ├── Unhex.java │ │ │ │ │ │ └── Upper.java │ │ │ │ │ └── xml │ │ │ │ │ │ ├── Extractvalue.java │ │ │ │ │ │ └── Updatexml.java │ │ │ │ └── literal │ │ │ │ │ ├── IntervalPrimary.java │ │ │ │ │ ├── Literal.java │ │ │ │ │ ├── LiteralBitField.java │ │ │ │ │ ├── LiteralBoolean.java │ │ │ │ │ ├── LiteralHexadecimal.java │ │ │ │ │ ├── LiteralNull.java │ │ │ │ │ ├── LiteralNumber.java │ │ │ │ │ ├── LiteralString.java │ │ │ │ │ └── LiteralTimestamp.java │ │ │ ├── string │ │ │ │ ├── LikeExpression.java │ │ │ │ ├── RegexpExpression.java │ │ │ │ └── SoundsLikeExpression.java │ │ │ └── type │ │ │ │ ├── CastBinaryExpression.java │ │ │ │ └── CollateExpression.java │ │ ├── fragment │ │ │ ├── GroupBy.java │ │ │ ├── Limit.java │ │ │ ├── OrderBy.java │ │ │ ├── SortOrder.java │ │ │ ├── VariableScope.java │ │ │ ├── ddl │ │ │ │ ├── ColumnDefinition.java │ │ │ │ ├── TableOptions.java │ │ │ │ ├── datatype │ │ │ │ │ └── DataType.java │ │ │ │ └── index │ │ │ │ │ ├── IndexColumnName.java │ │ │ │ │ ├── IndexDefinition.java │ │ │ │ │ └── IndexOption.java │ │ │ └── tableref │ │ │ │ ├── AliasableTableReference.java │ │ │ │ ├── Dual.java │ │ │ │ ├── IndexHint.java │ │ │ │ ├── InnerJoin.java │ │ │ │ ├── NaturalJoin.java │ │ │ │ ├── OuterJoin.java │ │ │ │ ├── StraightJoin.java │ │ │ │ ├── SubqueryFactor.java │ │ │ │ ├── TableRefFactor.java │ │ │ │ ├── TableReference.java │ │ │ │ └── TableReferences.java │ │ └── stmt │ │ │ ├── SQLStatement.java │ │ │ ├── compound │ │ │ ├── BeginEndStatement.java │ │ │ ├── CompoundStatement.java │ │ │ ├── DeclareStatement.java │ │ │ ├── condition │ │ │ │ ├── Characteristics.java │ │ │ │ ├── ConditionValue.java │ │ │ │ ├── DeclareConditionStatement.java │ │ │ │ ├── DeclareHandlerStatement.java │ │ │ │ ├── GetDiagnosticsStatement.java │ │ │ │ ├── ResignalStatement.java │ │ │ │ └── SignalStatement.java │ │ │ ├── cursors │ │ │ │ ├── CursorCloseStatement.java │ │ │ │ ├── CursorDeclareStatement.java │ │ │ │ ├── CursorFetchStatement.java │ │ │ │ └── CursorOpenStatement.java │ │ │ └── flowcontrol │ │ │ │ ├── CaseStatement.java │ │ │ │ ├── IfStatement.java │ │ │ │ ├── IterateStatement.java │ │ │ │ ├── LeaveStatement.java │ │ │ │ ├── LoopStatement.java │ │ │ │ ├── RepeatStatement.java │ │ │ │ ├── ReturnStatement.java │ │ │ │ └── WhileStatement.java │ │ │ ├── dal │ │ │ ├── DALSetCharacterSetStatement.java │ │ │ ├── DALSetNamesStatement.java │ │ │ ├── DALSetStatement.java │ │ │ ├── DALShowStatement.java │ │ │ ├── ShowAuthors.java │ │ │ ├── ShowBinLogEvent.java │ │ │ ├── ShowBinaryLog.java │ │ │ ├── ShowCharaterSet.java │ │ │ ├── ShowCharset.java │ │ │ ├── ShowCollation.java │ │ │ ├── ShowColumns.java │ │ │ ├── ShowContributors.java │ │ │ ├── ShowCreate.java │ │ │ ├── ShowCreateDatabase.java │ │ │ ├── ShowDatabases.java │ │ │ ├── ShowEngine.java │ │ │ ├── ShowEngines.java │ │ │ ├── ShowErrors.java │ │ │ ├── ShowEvents.java │ │ │ ├── ShowFields.java │ │ │ ├── ShowFunctionCode.java │ │ │ ├── ShowFunctionStatus.java │ │ │ ├── ShowGrants.java │ │ │ ├── ShowIndex.java │ │ │ ├── ShowMasterStatus.java │ │ │ ├── ShowOpenTables.java │ │ │ ├── ShowPlugins.java │ │ │ ├── ShowPrivileges.java │ │ │ ├── ShowProcedureCode.java │ │ │ ├── ShowProcedureStatus.java │ │ │ ├── ShowProcesslist.java │ │ │ ├── ShowProfile.java │ │ │ ├── ShowProfiles.java │ │ │ ├── ShowSlaveHosts.java │ │ │ ├── ShowSlaveStatus.java │ │ │ ├── ShowStatus.java │ │ │ ├── ShowTableStatus.java │ │ │ ├── ShowTables.java │ │ │ ├── ShowTriggers.java │ │ │ ├── ShowVariables.java │ │ │ └── ShowWarnings.java │ │ │ ├── ddl │ │ │ ├── DDLAlterEventStatement.java │ │ │ ├── DDLAlterTableStatement.java │ │ │ ├── DDLAlterViewStatement.java │ │ │ ├── DDLCreateEventStatement.java │ │ │ ├── DDLCreateFunctionStatement.java │ │ │ ├── DDLCreateIndexStatement.java │ │ │ ├── DDLCreateLikeStatement.java │ │ │ ├── DDLCreateProcedureStatement.java │ │ │ ├── DDLCreateTableStatement.java │ │ │ ├── DDLCreateTriggerStatement.java │ │ │ ├── DDLCreateViewStatement.java │ │ │ ├── DDLDropIndexStatement.java │ │ │ ├── DDLDropTableStatement.java │ │ │ ├── DDLDropTriggerStatement.java │ │ │ ├── DDLRenameTableStatement.java │ │ │ ├── DDLStatement.java │ │ │ ├── DDLTruncateStatement.java │ │ │ ├── DescTableStatement.java │ │ │ └── ExplainStatement.java │ │ │ ├── dml │ │ │ ├── DMLCallStatement.java │ │ │ ├── DMLDeleteStatement.java │ │ │ ├── DMLInsertReplaceStatement.java │ │ │ ├── DMLInsertStatement.java │ │ │ ├── DMLQueryStatement.java │ │ │ ├── DMLReplaceStatement.java │ │ │ ├── DMLSelectStatement.java │ │ │ ├── DMLSelectUnionStatement.java │ │ │ ├── DMLStatement.java │ │ │ └── DMLUpdateStatement.java │ │ │ ├── extension │ │ │ ├── DropPrepareStatement.java │ │ │ ├── ExecutePrepareStatement.java │ │ │ ├── ExtDDLCreatePolicy.java │ │ │ ├── ExtDDLDropPolicy.java │ │ │ └── PrepareStatement.java │ │ │ └── mts │ │ │ ├── MTSCommitStatement.java │ │ │ ├── MTSReleaseStatement.java │ │ │ ├── MTSRollbackStatement.java │ │ │ ├── MTSSavepointStatement.java │ │ │ ├── MTSSetTransactionStatement.java │ │ │ └── MTSStartTransactionStatement.java │ │ ├── recognizer │ │ ├── SQLParserDelegate.java │ │ └── mysql │ │ │ ├── MySQLFunctionManager.java │ │ │ ├── MySQLToken.java │ │ │ ├── lexer │ │ │ ├── MySQLKeywords.java │ │ │ └── MySQLLexer.java │ │ │ └── syntax │ │ │ ├── MySQLCmpdParser.java │ │ │ ├── MySQLDALParser.java │ │ │ ├── MySQLDDLParser.java │ │ │ ├── MySQLDMLCallParser.java │ │ │ ├── MySQLDMLDeleteParser.java │ │ │ ├── MySQLDMLInsertParser.java │ │ │ ├── MySQLDMLInsertReplaceParser.java │ │ │ ├── MySQLDMLParser.java │ │ │ ├── MySQLDMLReplaceParser.java │ │ │ ├── MySQLDMLSelectParser.java │ │ │ ├── MySQLDMLUpdateParser.java │ │ │ ├── MySQLExprParser.java │ │ │ ├── MySQLMTSParser.java │ │ │ ├── MySQLParser.java │ │ │ └── MySQLPrepareParser.java │ │ ├── util │ │ ├── ArrayUtil.java │ │ ├── BinaryOperandCalculator.java │ │ ├── CharTypes.java │ │ ├── ExprEvalUtils.java │ │ ├── ListUtil.java │ │ ├── Pair.java │ │ ├── PairUtil.java │ │ ├── ParseString.java │ │ ├── ParseUtil.java │ │ ├── Tuple.java │ │ ├── Tuple2.java │ │ ├── Tuple3.java │ │ ├── Tuple4.java │ │ ├── Tuple5.java │ │ └── UnaryOperandCalculator.java │ │ └── visitor │ │ ├── OutputVisitor.java │ │ └── Visitor.java └── kotlin │ ├── Main.kt │ └── com │ └── lss233 │ └── minidb │ ├── engine │ ├── Attribute.kt │ ├── Cell.kt │ ├── NTable.kt │ ├── NTuple.kt │ ├── Relation.kt │ ├── RelationMath.kt │ ├── SQLParser.kt │ ├── StringUtils.kt │ ├── config │ │ ├── DBConfig.kt │ │ └── DbStorageConfig.kt │ ├── index │ │ ├── Dictionary.kt │ │ ├── NativeMethods.kt │ │ ├── Node.kt │ │ └── bptree │ │ │ ├── BPlusConfiguration.kt │ │ │ ├── BPlusTree.kt │ │ │ ├── Configuration.kt │ │ │ ├── MainDataConfiguration.kt │ │ │ ├── MainDataFile.kt │ │ │ ├── TreeFreePoolNode.kt │ │ │ ├── TreeInternalNode.kt │ │ │ ├── TreeLeaf.kt │ │ │ ├── TreeNode.kt │ │ │ └── TreeOverflow.kt │ ├── memory │ │ ├── Database.kt │ │ ├── Engine.kt │ │ ├── Schema.kt │ │ ├── Table.kt │ │ ├── View.kt │ │ └── internal │ │ │ ├── catalog │ │ │ ├── AttributeView.kt │ │ │ ├── ClassView.kt │ │ │ ├── DatabaseView.kt │ │ │ ├── IndexView.kt │ │ │ ├── InheritsView.kt │ │ │ ├── NamespaceView.kt │ │ │ ├── OpclassView.kt │ │ │ ├── PostgresCatalogView.kt │ │ │ ├── RewriteView.kt │ │ │ ├── TablespaceView.kt │ │ │ └── TypeView.kt │ │ │ └── information │ │ │ ├── ColumnsView.kt │ │ │ ├── InformationSchemaView.kt │ │ │ ├── ParametersView.kt │ │ │ └── RoutinesView.kt │ ├── scheduleTask │ │ └── StorageTask.kt │ ├── schema │ │ └── Column.kt │ ├── storage │ │ ├── StorageService.kt │ │ ├── executor │ │ │ ├── Create.kt │ │ │ ├── Delete.kt │ │ │ ├── Insert.kt │ │ │ ├── Select.kt │ │ │ └── Update.kt │ │ ├── io │ │ │ └── DbRandomAccessIo.kt │ │ ├── page │ │ │ ├── Page.kt │ │ │ ├── Segment.kt │ │ │ └── SegmentPageContainer.kt │ │ ├── result │ │ │ ├── DBResult.kt │ │ │ └── DBResultType.kt │ │ ├── struct │ │ │ ├── DbInfo.kt │ │ │ ├── DbStruct.kt │ │ │ ├── DbTableField.kt │ │ │ ├── DbTableStruct.kt │ │ │ ├── SelectRange.kt │ │ │ └── TableHeader.kt │ │ └── type │ │ │ ├── StoredType.kt │ │ │ └── TypeLen.kt │ └── visitor │ │ ├── CreateTableStatementVisitor.kt │ │ ├── DropTableStatementVisitor.kt │ │ ├── InsertStatementVisitor.kt │ │ ├── SelectStatementVisitor.kt │ │ └── UpdateStatementVisitor.kt │ ├── exception │ └── MiniDBException.kt │ ├── networking │ ├── MySQLProtocolInitializer.kt │ ├── NettyServer.kt │ ├── PostgresProtocolInitializer.kt │ ├── Session.kt │ ├── codec │ │ ├── MySQLDecoder.kt │ │ ├── MySQLEncoder.kt │ │ ├── PostgreSQLDecoder.kt │ │ └── PostgreSQLEncoder.kt │ ├── handler │ │ ├── mysql │ │ │ ├── command │ │ │ │ ├── ChangeDatabaseHandler.kt │ │ │ │ ├── QueryHandler.kt │ │ │ │ └── ShowFieldsHandler.kt │ │ │ └── handshake │ │ │ │ └── InitialHandshakeHandler.kt │ │ └── postgres │ │ │ ├── TerminateHandler.kt │ │ │ ├── query │ │ │ └── QueryHandler.kt │ │ │ └── startup │ │ │ ├── SSLRequestRejectHandler.kt │ │ │ └── StartupMessageHandler.kt │ ├── packets │ │ ├── mysql │ │ │ ├── ChangeDatabase.kt │ │ │ ├── ColumnDefinition.kt │ │ │ ├── EOFPacket.kt │ │ │ ├── ERRPacket.kt │ │ │ ├── HandshakeResponse41.kt │ │ │ ├── HandshakeV10.kt │ │ │ ├── MessageType.kt │ │ │ ├── MySQLPacket.kt │ │ │ ├── OKPacket.kt │ │ │ ├── RequestQuery.kt │ │ │ ├── RequestShowFields.kt │ │ │ ├── TextResultsetIndicator.kt │ │ │ └── TextResultsetRow.kt │ │ └── postgres │ │ │ ├── AuthenticationOk.kt │ │ │ ├── AuthenticationSASL.kt │ │ │ ├── CommandComplete.kt │ │ │ ├── DataRow.kt │ │ │ ├── EmptyQueryResponse.kt │ │ │ ├── ErrorResponse.kt │ │ │ ├── MessageType.kt │ │ │ ├── NotificationResponse.kt │ │ │ ├── ParameterStatus.kt │ │ │ ├── PostgresSQLPacket.kt │ │ │ ├── Query.kt │ │ │ ├── ReadyForQuery.kt │ │ │ ├── RowDescription.kt │ │ │ ├── SSLRequest.kt │ │ │ ├── StartupMessage.kt │ │ │ └── Terminate.kt │ ├── protocol │ │ └── mysql │ │ │ ├── CapabilitiesFlags.kt │ │ │ ├── ConnectionPhrase.kt │ │ │ ├── MySQLSession.kt │ │ │ └── ServerStatusFlag.kt │ └── utils │ │ └── MySQLBufWrapper.kt │ └── utils │ ├── BufUtil.kt │ ├── ByteUtil.kt │ ├── ConsoleTableBuilder.kt │ ├── FileUtil.kt │ ├── OrderPair.kt │ └── TypeUtil.kt └── test └── kotlin └── com └── lss233 └── minidb └── engine ├── Main.kt └── RelationTest.kt /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .gradle 3 | /gradle/wrapper/ 4 | /gradle/ 5 | /build/ 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Dark Litss, icebigpig 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MiniDB 2 | [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Flss233%2FMiniDB.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Flss233%2FMiniDB?ref=badge_shield) 3 | 4 | A lightweight database implementation in kotlin, written as a learning project. 5 | ## Architecture 6 | ![Architecture](docs/MiniDB%20-%20Architecture.png) 7 | 8 | ## License 9 | [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Flss233%2FMiniDB.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Flss233%2FMiniDB?ref=badge_large) -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.jetbrains.kotlin.gradle.tasks.KotlinCompile 2 | 3 | plugins { 4 | // kotlin("jvm") version "1.7.20" 5 | id("org.jetbrains.kotlin.jvm") version "1.7.20" 6 | application 7 | } 8 | 9 | group = "com.lss233" 10 | version = "1.0-SNAPSHOT" 11 | 12 | repositories { 13 | maven (url = "https://lss233.littleservice.cn/repositories/minecraft") 14 | mavenCentral() 15 | } 16 | 17 | dependencies { 18 | implementation("io.netty:netty-all:4.1.84.Final") 19 | implementation("hu.webarticum:tree-printer:2.1.0") 20 | implementation("cn.hutool:hutool-all:5.8.9") 21 | implementation("com.google.code.gson:gson:2.10") 22 | implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.0") 23 | testImplementation(kotlin("test")) 24 | } 25 | 26 | tasks.test { 27 | useTestNG() 28 | } 29 | 30 | tasks.withType { 31 | kotlinOptions.jvmTarget = "1.8" 32 | } 33 | 34 | application { 35 | mainClass.set("MainKt") 36 | } -------------------------------------------------------------------------------- /docs/MiniDB - Architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lss233/MiniDB/8ab3d263e57c61a648856aae269b474201746294/docs/MiniDB - Architecture.png -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lss233/MiniDB/8ab3d263e57c61a648856aae269b474201746294/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | 2 | rootProject.name = "MiniDB" 3 | 4 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/ASTNode.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | 15 | package miniDB.parser.ast; 16 | 17 | import miniDB.parser.visitor.Visitor; 18 | 19 | /** 20 | * (created at 2011-1-23) 21 | * @author QIU Shuo 22 | */ 23 | public interface ASTNode { 24 | void accept(Visitor visitor); 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/ReplacableExpression.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-8-1) 16 | */ 17 | package miniDB.parser.ast.expression; 18 | 19 | import miniDB.parser.ast.expression.primary.literal.LiteralBoolean; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public interface ReplacableExpression extends Expression { 25 | LiteralBoolean BOOL_FALSE = new LiteralBoolean(false); 26 | 27 | void setReplaceExpr(Expression replaceExpr); 28 | 29 | void clearReplaceExpr(); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/bit/BitInvertExpression.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-20) 16 | */ 17 | package miniDB.parser.ast.expression.bit; 18 | 19 | 20 | import miniDB.parser.ast.expression.Expression; 21 | import miniDB.parser.ast.expression.UnaryOperatorExpression; 22 | 23 | /** 24 | * '~' higherExpr 25 | * 26 | * @author QIU Shuo 27 | */ 28 | public class BitInvertExpression extends UnaryOperatorExpression { 29 | public BitInvertExpression(Expression operand) { 30 | super(operand, PRECEDENCE_UNARY_OP); 31 | } 32 | 33 | @Override 34 | public String getOperator() { 35 | return "~"; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/misc/QueryExpression.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-10) 16 | */ 17 | package miniDB.parser.ast.expression.misc; 18 | 19 | import miniDB.parser.ast.expression.Expression; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public interface QueryExpression extends Expression { 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/misc/SubqueryAllExpression.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-20) 16 | */ 17 | package miniDB.parser.ast.expression.misc; 18 | 19 | import miniDB.parser.ast.expression.UnaryOperatorExpression; 20 | 21 | /** 22 | * 'ALL' '(' subquery ')' 23 | * 24 | * @author QIU Shuo 25 | */ 26 | public class SubqueryAllExpression extends UnaryOperatorExpression { 27 | public SubqueryAllExpression(QueryExpression subquery) { 28 | super(subquery, PRECEDENCE_PRIMARY); 29 | } 30 | 31 | @Override 32 | public String getOperator() { 33 | return "ALL"; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/misc/SubqueryAnyExpression.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-20) 16 | */ 17 | package miniDB.parser.ast.expression.misc; 18 | 19 | import miniDB.parser.ast.expression.UnaryOperatorExpression; 20 | 21 | /** 22 | * ('ANY'|'SOME') '(' subquery ')' 23 | * 24 | * @author QIU Shuo 25 | */ 26 | public class SubqueryAnyExpression extends UnaryOperatorExpression { 27 | public SubqueryAnyExpression(QueryExpression subquery) { 28 | super(subquery, PRECEDENCE_PRIMARY); 29 | } 30 | 31 | @Override 32 | public String getOperator() { 33 | return "ANY"; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/DefaultValue.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-27) 16 | */ 17 | package miniDB.parser.ast.expression.primary; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * used as right oprand for assignment of INSERT and REPLACE 23 | * 24 | * @author QIU Shuo 25 | */ 26 | public class DefaultValue extends PrimaryExpression { 27 | 28 | @Override 29 | public void accept(Visitor visitor) { 30 | visitor.visit(this); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/NewRowPrimary.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary; 2 | 3 | import miniDB.parser.visitor.Visitor; 4 | 5 | /** 6 | * 7 | * @author liuhuanting 8 | * @date 2017年11月1日 下午5:19:52 9 | * 10 | */ 11 | public class NewRowPrimary extends VariableExpression { 12 | /** include starting '@', e.g. "@'mary''s'" */ 13 | private final String varText; 14 | 15 | public NewRowPrimary(String varText) { 16 | this.varText = varText; 17 | } 18 | 19 | public String getVarText() { 20 | return varText; 21 | } 22 | 23 | @Override 24 | public void accept(Visitor visitor) { 25 | visitor.visit(this); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/OldRowPrimary.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary; 2 | 3 | import miniDB.parser.visitor.Visitor; 4 | 5 | /** 6 | * 7 | * @author liuhuanting 8 | * @date 2017年11月22日 上午11:06:08 9 | * 10 | */ 11 | public class OldRowPrimary extends VariableExpression { 12 | /** include starting '@', e.g. "@'mary''s'" */ 13 | private final String varText; 14 | 15 | public OldRowPrimary(String varText) { 16 | this.varText = varText; 17 | } 18 | 19 | public String getVarText() { 20 | return varText; 21 | } 22 | 23 | @Override 24 | public void accept(Visitor visitor) { 25 | visitor.visit(this); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/PrimaryExpression.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-4-12) 16 | */ 17 | package miniDB.parser.ast.expression.primary; 18 | 19 | import miniDB.parser.ast.expression.AbstractExpression; 20 | 21 | import java.util.Map; 22 | 23 | /** 24 | * @author QIU Shuo 25 | */ 26 | public abstract class PrimaryExpression extends AbstractExpression { 27 | @Override 28 | public int getPrecedence() { 29 | return PRECEDENCE_PRIMARY; 30 | } 31 | 32 | @Override 33 | public Object evaluationInternal(Map parameters) { 34 | return UNEVALUATABLE; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/VariableExpression.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-19) 16 | */ 17 | package miniDB.parser.ast.expression.primary; 18 | 19 | /** 20 | * @author QIU Shuo 21 | */ 22 | public abstract class VariableExpression extends PrimaryExpression { 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/Wildcard.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-2-13) 16 | */ 17 | package miniDB.parser.ast.expression.primary; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * stand for * 23 | * 24 | * @author QIU Shuo 25 | */ 26 | public class Wildcard extends Identifier { 27 | public Wildcard(Identifier parent) { 28 | super(parent, "*", "*"); 29 | } 30 | 31 | @Override 32 | public void accept(Visitor visitor) { 33 | visitor.visit(this); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/DefaultFunction.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.visitor.Visitor; 5 | 6 | import java.util.List; 7 | 8 | public class DefaultFunction extends FunctionExpression { 9 | private String functionName; 10 | 11 | public DefaultFunction(String functionName, List arguments) { 12 | super(functionName, arguments); 13 | this.functionName = functionName; 14 | } 15 | 16 | @Override 17 | public FunctionExpression constructFunction(List arguments) { 18 | return new DefaultFunction(functionName, arguments); 19 | } 20 | 21 | @Override 22 | public void accept(Visitor visitor) { 23 | visitor.visit(this); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/datetime/CurTimestamp.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.datetime; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | 6 | import java.util.List; 7 | 8 | public class CurTimestamp extends FunctionExpression { 9 | 10 | public CurTimestamp() { 11 | super("CURTIMTSTAMP", null); 12 | } 13 | 14 | @Override 15 | public FunctionExpression constructFunction(List arguments) { 16 | return new CurTimestamp(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/datetime/Curdate.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-23) 16 | */ 17 | package miniDB.parser.ast.expression.primary.function.datetime; 18 | 19 | import miniDB.parser.ast.expression.Expression; 20 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 21 | 22 | import java.util.List; 23 | 24 | /** 25 | * @author QIU Shuo 26 | */ 27 | public class Curdate extends FunctionExpression { 28 | public Curdate() { 29 | super("CURDATE", null); 30 | } 31 | 32 | @Override 33 | public FunctionExpression constructFunction(List arguments) { 34 | return new Curdate(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/datetime/Curtime.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-23) 16 | */ 17 | package miniDB.parser.ast.expression.primary.function.datetime; 18 | 19 | import miniDB.parser.ast.expression.Expression; 20 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 21 | 22 | import java.util.List; 23 | 24 | /** 25 | * @author QIU Shuo 26 | */ 27 | public class Curtime extends FunctionExpression { 28 | public Curtime() { 29 | super("CURTIME", null); 30 | } 31 | 32 | @Override 33 | public FunctionExpression constructFunction(List arguments) { 34 | return new Curtime(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/datetime/Now.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-23) 16 | */ 17 | package miniDB.parser.ast.expression.primary.function.datetime; 18 | 19 | import miniDB.parser.ast.expression.Expression; 20 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 21 | 22 | import java.util.List; 23 | 24 | /** 25 | * @author QIU Shuo 26 | */ 27 | public class Now extends FunctionExpression { 28 | public Now() { 29 | super("NOW", null); 30 | } 31 | 32 | @Override 33 | public FunctionExpression constructFunction(List arguments) { 34 | return new Now(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/flowctrl/If.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-23) 16 | */ 17 | package miniDB.parser.ast.expression.primary.function.flowctrl; 18 | 19 | import miniDB.parser.ast.expression.Expression; 20 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 21 | 22 | import java.util.List; 23 | 24 | /** 25 | * @author QIU Shuo 26 | */ 27 | public class If extends FunctionExpression { 28 | public If(List arguments) { 29 | super("IF", arguments); 30 | } 31 | 32 | @Override 33 | public FunctionExpression constructFunction(List arguments) { 34 | return new If(arguments); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/info/CurrentUser.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-23) 16 | */ 17 | package miniDB.parser.ast.expression.primary.function.info; 18 | 19 | import miniDB.parser.ast.expression.Expression; 20 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 21 | 22 | import java.util.List; 23 | 24 | /** 25 | * @author QIU Shuo 26 | */ 27 | public class CurrentUser extends FunctionExpression { 28 | public CurrentUser() { 29 | super("CURRENT_USER", null); 30 | } 31 | 32 | @Override 33 | public FunctionExpression constructFunction(List arguments) { 34 | return new CurrentUser(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Area.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Area extends FunctionExpression { 10 | 11 | public Area(Expression expr) { 12 | super("AREA", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/AsBinary.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class AsBinary extends FunctionExpression { 10 | public AsBinary(Expression expr) { 11 | super("ASBINARY", wrapList(expr)); 12 | } 13 | 14 | @Override 15 | public FunctionExpression constructFunction(List arguments) { 16 | throw new UnsupportedOperationException("function of char has special arguments"); 17 | } 18 | 19 | @Override 20 | public void accept(Visitor visitor) { 21 | visitor.visit(this); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/AsText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class AsText extends FunctionExpression { 10 | 11 | public AsText(Expression expr) { 12 | super("ASTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/AsWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class AsWKB extends FunctionExpression { 10 | public AsWKB(Expression expr) { 11 | super("ASWKB", wrapList(expr)); 12 | } 13 | 14 | @Override 15 | public FunctionExpression constructFunction(List arguments) { 16 | throw new UnsupportedOperationException("function of char has special arguments"); 17 | } 18 | 19 | @Override 20 | public void accept(Visitor visitor) { 21 | visitor.visit(this); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/AsWKT.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class AsWKT extends FunctionExpression { 10 | public AsWKT(Expression expr) { 11 | super("ASWKT", wrapList(expr)); 12 | } 13 | 14 | @Override 15 | public FunctionExpression constructFunction(List arguments) { 16 | throw new UnsupportedOperationException("function of char has special arguments"); 17 | } 18 | 19 | @Override 20 | public void accept(Visitor visitor) { 21 | visitor.visit(this); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Buffer.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Buffer extends FunctionExpression { 10 | 11 | public Buffer(List arguments) { 12 | super("BUFFER", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Buffer(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Centroid.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Centroid extends FunctionExpression { 10 | 11 | public Centroid(Expression expr) { 12 | super("CENTROID", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Contains.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Contains extends FunctionExpression { 10 | 11 | public Contains(List arguments) { 12 | super("CONTAINS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Contains(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Crosses.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Crosses extends FunctionExpression { 10 | 11 | public Crosses(List arguments) { 12 | super("CROSSES", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Crosses(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Dimension.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Dimension extends FunctionExpression { 10 | 11 | public Dimension(Expression expr) { 12 | super("DIMENSION", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Disjoint.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Disjoint extends FunctionExpression { 10 | 11 | public Disjoint(List arguments) { 12 | super("DISJOINT", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Disjoint(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/EndPoint.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class EndPoint extends FunctionExpression { 10 | 11 | public EndPoint(Expression expr) { 12 | super("ENDPOINT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Envelope.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Envelope extends FunctionExpression { 10 | 11 | public Envelope(Expression expr) { 12 | super("ENVELOPE", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Equals.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Equals extends FunctionExpression { 10 | 11 | public Equals(List arguments) { 12 | super("EQUALS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Equals(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ExteriorRing.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ExteriorRing extends FunctionExpression { 10 | 11 | public ExteriorRing(Expression expr) { 12 | super("EXTERIORRING", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GLength.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GLength extends FunctionExpression { 10 | 11 | public GLength(Expression expr) { 12 | super("GLENGTH", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeomCollFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeomCollFromText extends FunctionExpression { 10 | 11 | public GeomCollFromText(Expression expr) { 12 | super("GEOMCOLLFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeomCollFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeomCollFromWKB extends FunctionExpression { 10 | 11 | public GeomCollFromWKB(Expression expr) { 12 | super("GEOMCOLLFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeomFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeomFromText extends FunctionExpression { 10 | 11 | public GeomFromText(Expression expr) { 12 | super("GEOMFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeomFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeomFromWKB extends FunctionExpression { 10 | 11 | public GeomFromWKB(Expression expr) { 12 | super("GEOMFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeometryCollection.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeometryCollection extends FunctionExpression { 10 | 11 | public GeometryCollection(List arguments) { 12 | super("GEOMETRYCOLLECTION", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new GeometryCollection(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeometryCollectionFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeometryCollectionFromText extends FunctionExpression { 10 | 11 | public GeometryCollectionFromText(Expression expr) { 12 | super("GEOMETRYCOLLECTIONFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeometryCollectionFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeometryCollectionFromWKB extends FunctionExpression { 10 | 11 | public GeometryCollectionFromWKB(Expression expr) { 12 | super("GEOMETRYCOLLECTIONFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeometryFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeometryFromText extends FunctionExpression { 10 | 11 | public GeometryFromText(Expression expr) { 12 | super("GEOMETRYFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeometryN.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeometryN extends FunctionExpression { 10 | 11 | public GeometryN(List arguments) { 12 | super("GEOMETRYN", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new GeometryN(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/GeometryType.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class GeometryType extends FunctionExpression { 10 | 11 | public GeometryType(Expression expr) { 12 | super("GEOMETRYTYPE", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/InteriorRingN.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class InteriorRingN extends FunctionExpression { 10 | 11 | public InteriorRingN(List arguments) { 12 | super("INTERIORRINGN", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new InteriorRingN(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Intersects.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Intersects extends FunctionExpression { 10 | 11 | public Intersects(List arguments) { 12 | super("INTERSECTS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Intersects(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/IsClosed.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class IsClosed extends FunctionExpression { 10 | 11 | public IsClosed(Expression expr) { 12 | super("ISCLOSED", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/IsEmpty.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class IsEmpty extends FunctionExpression { 10 | 11 | public IsEmpty(Expression expr) { 12 | super("ISEMPTY", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/IsSimple.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class IsSimple extends FunctionExpression { 10 | 11 | public IsSimple(Expression expr) { 12 | super("ISSIMPLE", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/LineFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class LineFromText extends FunctionExpression { 10 | 11 | public LineFromText(Expression expr) { 12 | super("LINEFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/LineFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class LineFromWKB extends FunctionExpression { 10 | 11 | public LineFromWKB(Expression expr) { 12 | super("LIMEFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/LineString.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class LineString extends FunctionExpression { 10 | 11 | public LineString(List arguments) { 12 | super("LINESTRING", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new LineString(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/LineStringFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class LineStringFromWKB extends FunctionExpression { 10 | 11 | public LineStringFromWKB(Expression expr) { 12 | super("LINESTRINGFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MBRContains.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MBRContains extends FunctionExpression { 10 | 11 | public MBRContains(List arguments) { 12 | super("MBRCONTAINS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MBRContains(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MBRDisjoint.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MBRDisjoint extends FunctionExpression { 10 | 11 | public MBRDisjoint(List arguments) { 12 | super("MBRDISJOINT", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MBRDisjoint(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MBREqual.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MBREqual extends FunctionExpression { 10 | 11 | public MBREqual(List arguments) { 12 | super("MBREQUAL", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MBREqual(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MBRIntersects.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MBRIntersects extends FunctionExpression { 10 | 11 | public MBRIntersects(List arguments) { 12 | super("MBRINTERSECTS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MBRIntersects(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MBROverlaps.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MBROverlaps extends FunctionExpression { 10 | 11 | public MBROverlaps(List arguments) { 12 | super("MBROVERLAPS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MBROverlaps(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MBRTouches.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MBRTouches extends FunctionExpression { 10 | 11 | public MBRTouches(List arguments) { 12 | super("MBRTOUCHES", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MBRTouches(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MBRWithin.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MBRWithin extends FunctionExpression { 10 | 11 | public MBRWithin(List arguments) { 12 | super("MBRWITHIN", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MBRWithin(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MLineFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MLineFromText extends FunctionExpression { 10 | 11 | public MLineFromText(Expression expr) { 12 | super("MLINEFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MLineFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MLineFromWKB extends FunctionExpression { 10 | 11 | public MLineFromWKB(Expression expr) { 12 | super("MLINEFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MPointFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MPointFromText extends FunctionExpression { 10 | 11 | public MPointFromText(Expression expr) { 12 | super("MPORINTFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MPointFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MPointFromWKB extends FunctionExpression { 10 | 11 | public MPointFromWKB(Expression expr) { 12 | super("MPOINTFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MPolyFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MPolyFromText extends FunctionExpression { 10 | 11 | public MPolyFromText(Expression expr) { 12 | super("MPOLYFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MPolyFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MPolyFromWKB extends FunctionExpression { 10 | 11 | public MPolyFromWKB(Expression expr) { 12 | super("MPOLYFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiLineString.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiLineString extends FunctionExpression { 10 | 11 | public MultiLineString(List arguments) { 12 | super("MULTILINESTRING", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MultiLineString(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiLineStringFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiLineStringFromText extends FunctionExpression { 10 | 11 | public MultiLineStringFromText(Expression expr) { 12 | super("MULTILINESTRINGFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiLineStringFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiLineStringFromWKB extends FunctionExpression { 10 | 11 | public MultiLineStringFromWKB(Expression expr) { 12 | super("MULTILINESTRINGFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiPoint.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiPoint extends FunctionExpression { 10 | 11 | public MultiPoint(List arguments) { 12 | super("MULTIPOINT", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MultiPoint(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiPointFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiPointFromText extends FunctionExpression { 10 | 11 | public MultiPointFromText(Expression expr) { 12 | super("MULTIPOINTFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiPointFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiPointFromWKB extends FunctionExpression { 10 | 11 | public MultiPointFromWKB(Expression expr) { 12 | super("MULTIPOINTFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiPolygon.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiPolygon extends FunctionExpression { 10 | 11 | public MultiPolygon(List arguments) { 12 | super("MULTIPOLYGON", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new MultiPolygon(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiPolygonFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiPolygonFromText extends FunctionExpression { 10 | 11 | public MultiPolygonFromText(Expression expr) { 12 | super("MULTIPOLYGONFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/MultiPolygonFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class MultiPolygonFromWKB extends FunctionExpression { 10 | 11 | public MultiPolygonFromWKB(Expression expr) { 12 | super("MULTIPOLYGONFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/NumGeometries.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class NumGeometries extends FunctionExpression { 10 | 11 | public NumGeometries(Expression expr) { 12 | super("NUMGEOMETRIES", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/NumInteriorRings.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class NumInteriorRings extends FunctionExpression { 10 | 11 | public NumInteriorRings(Expression expr) { 12 | super("NUMINTERIORRINGS", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/NumPoints.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class NumPoints extends FunctionExpression { 10 | 11 | public NumPoints(Expression expr) { 12 | super("NUMPOINTS", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Overlaps.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Overlaps extends FunctionExpression { 10 | 11 | public Overlaps(List arguments) { 12 | super("OVERLAPS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Overlaps(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Point.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Point extends FunctionExpression { 10 | 11 | public Point(List arguments) { 12 | super("POINT", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Point(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/PointFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class PointFromText extends FunctionExpression { 10 | 11 | public PointFromText(Expression expr) { 12 | super("POINTFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/PointFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class PointFromWKB extends FunctionExpression { 10 | 11 | public PointFromWKB(Expression expr) { 12 | super("POINTFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/PointN.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class PointN extends FunctionExpression { 10 | 11 | public PointN(List arguments) { 12 | super("POINTN", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new PointN(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/PolyFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class PolyFromText extends FunctionExpression { 10 | 11 | public PolyFromText(Expression expr) { 12 | super("POLYFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/PolyFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class PolyFromWKB extends FunctionExpression { 10 | 11 | public PolyFromWKB(Expression expr) { 12 | super("POLYFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Polygon.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Polygon extends FunctionExpression { 10 | 11 | public Polygon(List arguments) { 12 | super("POLYGON", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Polygon(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/PolygonFromText.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class PolygonFromText extends FunctionExpression { 10 | 11 | public PolygonFromText(Expression expr) { 12 | super("POLYGONFROMTEXT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/PolygonFromWKB.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class PolygonFromWKB extends FunctionExpression { 10 | 11 | public PolygonFromWKB(Expression expr) { 12 | super("POLYGONFROMWKB", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/SRID.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class SRID extends FunctionExpression { 10 | 11 | public SRID(Expression expr) { 12 | super("SRID", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Area.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Area extends FunctionExpression { 10 | 11 | public ST_Area(Expression expr) { 12 | super("ST_AREA", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Centroid.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Centroid extends FunctionExpression { 10 | 11 | public ST_Centroid(Expression expr) { 12 | super("ST_CENTROID", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Contains.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Contains extends FunctionExpression { 10 | 11 | public ST_Contains(List arguments) { 12 | super("ST_CONTAINS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Contains(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Crosses.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Crosses extends FunctionExpression { 10 | 11 | public ST_Crosses(List arguments) { 12 | super("ST_CROSSES", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Crosses(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Difference.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Difference extends FunctionExpression { 10 | 11 | public ST_Difference(List arguments) { 12 | super("ST_DIFFERENCE", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Difference(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Disjoint.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Disjoint extends FunctionExpression { 10 | 11 | public ST_Disjoint(List arguments) { 12 | super("ST_DISJOINT", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Disjoint(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Distance.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Distance extends FunctionExpression { 10 | 11 | public ST_Distance(List arguments) { 12 | super("ST_DISTANCE", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Distance(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Envelope.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Envelope extends FunctionExpression { 10 | 11 | public ST_Envelope(Expression expr) { 12 | super("ST_ENVELOP", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Equals.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Equals extends FunctionExpression { 10 | 11 | public ST_Equals(List arguments) { 12 | super("ST_EQUALS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Equals(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Intersection.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Intersection extends FunctionExpression { 10 | 11 | public ST_Intersection(List arguments) { 12 | super("ST_INTERSECTION", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Intersection(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Intersects.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Intersects extends FunctionExpression { 10 | 11 | public ST_Intersects(List arguments) { 12 | super("ST_INTERSECTS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Intersects(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Overlaps.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Overlaps extends FunctionExpression { 10 | 11 | public ST_Overlaps(List arguments) { 12 | super("ST_OVERLAPS", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Overlaps(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_SymDifference.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_SymDifference extends FunctionExpression { 10 | 11 | public ST_SymDifference(List arguments) { 12 | super("ST_SYMDIFFERENCE", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_SymDifference(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Touches.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Touches extends FunctionExpression { 10 | 11 | public ST_Touches(List arguments) { 12 | super("ST_TOUCHES", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Touches(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Union.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Union extends FunctionExpression { 10 | 11 | public ST_Union(List arguments) { 12 | super("ST_UNION", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Union(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/ST_Within.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class ST_Within extends FunctionExpression { 10 | 11 | public ST_Within(List arguments) { 12 | super("ST_WITHIN", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new ST_Within(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/StartPoint.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class StartPoint extends FunctionExpression { 10 | 11 | public StartPoint(Expression expr) { 12 | super("STARTPOINT", wrapList(expr)); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | throw new UnsupportedOperationException("function of char has special arguments"); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Touches.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Touches extends FunctionExpression { 10 | 11 | public Touches(List arguments) { 12 | super("TOUCHES", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Touches(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Within.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Within extends FunctionExpression { 10 | 11 | public Within(List arguments) { 12 | super("WITHIN", arguments); 13 | } 14 | 15 | @Override 16 | public FunctionExpression constructFunction(List arguments) { 17 | return new Within(arguments); 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/X.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class X extends FunctionExpression { 10 | public X(Expression expr) { 11 | super("X", wrapList(expr)); 12 | } 13 | 14 | @Override 15 | public FunctionExpression constructFunction(List arguments) { 16 | throw new UnsupportedOperationException("function of char has special arguments"); 17 | } 18 | 19 | @Override 20 | public void accept(Visitor visitor) { 21 | visitor.visit(this); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/function/spatial/Y.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.function.spatial; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.function.FunctionExpression; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | public class Y extends FunctionExpression { 10 | public Y(Expression expr) { 11 | super("Y", wrapList(expr)); 12 | } 13 | 14 | @Override 15 | public FunctionExpression constructFunction(List arguments) { 16 | throw new UnsupportedOperationException("function of char has special arguments"); 17 | } 18 | 19 | @Override 20 | public void accept(Visitor visitor) { 21 | visitor.visit(this); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/literal/Literal.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2012-11-2) 16 | */ 17 | package miniDB.parser.ast.expression.primary.literal; 18 | 19 | import miniDB.parser.ast.expression.primary.PrimaryExpression; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public abstract class Literal extends PrimaryExpression { 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/literal/LiteralNull.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-21) 16 | */ 17 | package miniDB.parser.ast.expression.primary.literal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | import java.util.Map; 22 | 23 | /** 24 | * @author QIU Shuo 25 | */ 26 | public class LiteralNull extends Literal { 27 | @Override 28 | public Object evaluationInternal(Map parameters) { 29 | return null; 30 | } 31 | 32 | @Override 33 | public void accept(Visitor visitor) { 34 | visitor.visit(this); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/primary/literal/LiteralTimestamp.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.expression.primary.literal; 2 | 3 | import miniDB.parser.visitor.Visitor; 4 | 5 | public class LiteralTimestamp extends Literal { 6 | 7 | @Override 8 | public void accept(Visitor visitor) { 9 | 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/expression/type/CastBinaryExpression.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-1-20) 16 | */ 17 | package miniDB.parser.ast.expression.type; 18 | 19 | import miniDB.parser.ast.expression.Expression; 20 | import miniDB.parser.ast.expression.UnaryOperatorExpression; 21 | 22 | /** 23 | * 'BINARY' higherExpr 24 | * 25 | * @author QIU Shuo 26 | */ 27 | public class CastBinaryExpression extends UnaryOperatorExpression { 28 | public CastBinaryExpression(Expression operand) { 29 | super(operand, PRECEDENCE_BINARY); 30 | } 31 | 32 | @Override 33 | public String getOperator() { 34 | return "BINARY"; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/fragment/SortOrder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-16) 16 | */ 17 | package miniDB.parser.ast.fragment; 18 | 19 | /** 20 | * @author QIU Shuo 21 | */ 22 | public enum SortOrder { 23 | ASC, DESC 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/fragment/VariableScope.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-6-8) 16 | */ 17 | package miniDB.parser.ast.fragment; 18 | 19 | /** 20 | * @author QIU Shuo 21 | */ 22 | public enum VariableScope { 23 | SESSION, GLOBAL 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/SQLStatement.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-2-18) 16 | */ 17 | package miniDB.parser.ast.stmt; 18 | 19 | import miniDB.parser.ast.ASTNode; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public interface SQLStatement extends ASTNode { 25 | public enum StmtType { 26 | DML_SELECT, DML_DELETE, DML_INSERT, DML_REPLACE, DML_UPDATE, DML_CALL, DAL_SET, DAL_SHOW, MTL_START, 27 | /** COMMIT or ROLLBACK */ 28 | MTL_TERMINATE, MTL_ISOLATION 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/BeginEndStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.SQLStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * @author liuhuanting 12 | * @date 2017年11月1日 下午4:30:03 13 | * 14 | */ 15 | public class BeginEndStatement implements CompoundStatement { 16 | private final Identifier label; 17 | private final List statements; 18 | 19 | public BeginEndStatement(Identifier label, List statements) { 20 | this.label = label; 21 | this.statements = statements; 22 | } 23 | 24 | public Identifier getLabel() { 25 | return label; 26 | } 27 | 28 | public List getStatements() { 29 | return statements; 30 | } 31 | 32 | @Override 33 | public void accept(Visitor visitor) { 34 | visitor.visit(this); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/CompoundStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound; 2 | 3 | 4 | import miniDB.parser.ast.stmt.SQLStatement; 5 | 6 | /** 7 | * 8 | * @author liuhuanting 9 | * @date 2017年11月1日 下午2:43:54 10 | * 11 | */ 12 | public interface CompoundStatement extends SQLStatement { 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/DeclareStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.Identifier; 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType; 6 | import miniDB.parser.visitor.Visitor; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 12 | * @author liuhuanting 13 | * @date 2017年11月1日 下午4:22:14 14 | * 15 | */ 16 | public class DeclareStatement implements CompoundStatement { 17 | private final List varNames; 18 | private final DataType dataType; 19 | private final Expression defaultVal; 20 | 21 | public List getVarNames() { 22 | return varNames; 23 | } 24 | 25 | public DataType getDataType() { 26 | return dataType; 27 | } 28 | 29 | public Expression getDefaultVal() { 30 | return defaultVal; 31 | } 32 | 33 | public DeclareStatement(List varNames, DataType dataType, Expression defaultVal) { 34 | this.varNames = varNames; 35 | this.dataType = dataType; 36 | this.defaultVal = defaultVal; 37 | } 38 | 39 | @Override 40 | public void accept(Visitor visitor) { 41 | visitor.visit(this); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/condition/DeclareConditionStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.condition; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | /** 8 | * 9 | * @author liuhuanting 10 | * @date 2017年11月1日 下午4:25:22 11 | * 12 | */ 13 | public class DeclareConditionStatement implements CompoundStatement { 14 | private final Identifier name; 15 | private final ConditionValue value; 16 | 17 | public DeclareConditionStatement(Identifier name, ConditionValue value) { 18 | this.name = name; 19 | this.value = value; 20 | } 21 | 22 | public Identifier getName() { 23 | return name; 24 | } 25 | 26 | public ConditionValue getValue() { 27 | return value; 28 | } 29 | 30 | @Override 31 | public void accept(Visitor visitor) { 32 | visitor.visit(this); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/cursors/CursorCloseStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.cursors; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | /** 8 | * 9 | * @author liuhuanting 10 | * @date 2017年11月1日 下午4:24:06 11 | * 12 | */ 13 | public class CursorCloseStatement implements CompoundStatement { 14 | private final Identifier name; 15 | 16 | public CursorCloseStatement(Identifier name) { 17 | this.name = name; 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | public Identifier getName() { 26 | return this.name; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/cursors/CursorDeclareStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.cursors; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.SQLStatement; 5 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 6 | import miniDB.parser.visitor.Visitor; 7 | 8 | /** 9 | * 10 | * @author liuhuanting 11 | * @date 2017年11月1日 下午4:24:19 12 | * 13 | */ 14 | public class CursorDeclareStatement implements CompoundStatement { 15 | private final Identifier name; 16 | private final SQLStatement stmt; 17 | 18 | public CursorDeclareStatement(Identifier name, SQLStatement stmt) { 19 | this.name = name; 20 | this.stmt = stmt; 21 | } 22 | 23 | @Override 24 | public void accept(Visitor visitor) { 25 | visitor.visit(this); 26 | } 27 | 28 | public Identifier getName() { 29 | return this.name; 30 | } 31 | 32 | public SQLStatement getStmt() { 33 | return this.stmt; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/cursors/CursorFetchStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.cursors; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * @author liuhuanting 12 | * @date 2017年11月1日 下午4:24:35 13 | * 14 | */ 15 | public class CursorFetchStatement implements CompoundStatement { 16 | private final Identifier name; 17 | private final List varNames; 18 | 19 | public CursorFetchStatement(Identifier name, List varNames) { 20 | this.name = name; 21 | this.varNames = varNames; 22 | } 23 | 24 | @Override 25 | public void accept(Visitor visitor) { 26 | visitor.visit(this); 27 | } 28 | 29 | public Identifier getName() { 30 | return this.name; 31 | } 32 | 33 | public List getVarNames() { 34 | return varNames; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/cursors/CursorOpenStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.cursors; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | /** 8 | * 9 | * @author liuhuanting 10 | * @date 2017年11月1日 下午4:24:52 11 | * 12 | */ 13 | public class CursorOpenStatement implements CompoundStatement { 14 | private final Identifier name; 15 | 16 | public CursorOpenStatement(Identifier name) { 17 | this.name = name; 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | public Identifier getName() { 26 | return this.name; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/flowcontrol/IterateStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.flowcontrol; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | /** 8 | * 9 | * @author liuhuanting 10 | * @date 2017年11月1日 下午4:20:05 11 | * 12 | */ 13 | public class IterateStatement implements CompoundStatement { 14 | private final Identifier label; 15 | 16 | public IterateStatement(Identifier label) { 17 | this.label = label; 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | public Identifier getLabel() { 26 | return this.label; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/flowcontrol/LeaveStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.flowcontrol; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | /** 8 | * 9 | * @author liuhuanting 10 | * @date 2017年11月1日 下午4:21:58 11 | * 12 | */ 13 | public class LeaveStatement implements CompoundStatement { 14 | private final Identifier label; 15 | 16 | public LeaveStatement(Identifier label) { 17 | this.label = label; 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | public Identifier getLabel() { 26 | return this.label; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/flowcontrol/LoopStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.flowcontrol; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.SQLStatement; 5 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 6 | import miniDB.parser.visitor.Visitor; 7 | 8 | /** 9 | * 10 | * @author liuhuanting 11 | * @date 2017年11月1日 下午4:20:24 12 | * 13 | */ 14 | public class LoopStatement implements CompoundStatement { 15 | 16 | private final Identifier label; 17 | private final SQLStatement stmt; 18 | 19 | public Identifier getLabel() { 20 | return label; 21 | } 22 | 23 | public SQLStatement getStmt() { 24 | return stmt; 25 | } 26 | 27 | /** 28 | *

Description:

29 | * @param label 30 | * @param stmt : 31 | */ 32 | public LoopStatement(Identifier label, SQLStatement stmt) { 33 | this.label = label; 34 | this.stmt = stmt; 35 | } 36 | 37 | @Override 38 | public void accept(Visitor visitor) { 39 | visitor.visit(this); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/flowcontrol/RepeatStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.flowcontrol; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.expression.primary.Identifier; 5 | import miniDB.parser.ast.stmt.SQLStatement; 6 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 7 | import miniDB.parser.visitor.Visitor; 8 | 9 | /** 10 | * 11 | * @author liuhuanting 12 | * @date 2017年11月1日 下午4:21:00 13 | * 14 | */ 15 | public class RepeatStatement implements CompoundStatement { 16 | private final Identifier label; 17 | private final SQLStatement stmt; 18 | private final Expression utilCondition; 19 | 20 | public Identifier getLabel() { 21 | return label; 22 | } 23 | 24 | public SQLStatement getStmt() { 25 | return stmt; 26 | } 27 | 28 | public Expression getUtilCondition() { 29 | return utilCondition; 30 | } 31 | 32 | public RepeatStatement(Identifier label, SQLStatement stmt, Expression utilCondition) { 33 | this.label = label; 34 | this.stmt = stmt; 35 | this.utilCondition = utilCondition; 36 | } 37 | 38 | @Override 39 | public void accept(Visitor visitor) { 40 | visitor.visit(this); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/compound/flowcontrol/ReturnStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.compound.flowcontrol; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.compound.CompoundStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | /** 8 | * 9 | * @author liuhuanting 10 | * @date 2017年11月1日 下午6:43:45 11 | * 12 | */ 13 | public class ReturnStatement implements CompoundStatement { 14 | private final Identifier label; 15 | 16 | public ReturnStatement(Identifier label) { 17 | this.label = label; 18 | } 19 | 20 | @Override 21 | public void accept(Visitor visitor) { 22 | visitor.visit(this); 23 | } 24 | 25 | public Identifier getLabel() { 26 | return this.label; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/DALShowStatement.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-20) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.ast.stmt.SQLStatement; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public abstract class DALShowStatement implements SQLStatement { 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowAuthors.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-20) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowAuthors extends DALShowStatement { 25 | @Override 26 | public void accept(Visitor visitor) { 27 | visitor.visit(this); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowBinaryLog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-20) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowBinaryLog extends DALShowStatement { 25 | @Override 26 | public void accept(Visitor visitor) { 27 | visitor.visit(this); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowContributors.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-20) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowContributors extends DALShowStatement { 25 | @Override 26 | public void accept(Visitor visitor) { 27 | visitor.visit(this); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowEngines.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-21) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowEngines extends DALShowStatement { 25 | @Override 26 | public void accept(Visitor visitor) { 27 | visitor.visit(this); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowMasterStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-21) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowMasterStatus extends DALShowStatement { 25 | 26 | @Override 27 | public void accept(Visitor visitor) { 28 | visitor.visit(this); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowPlugins.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-21) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowPlugins extends DALShowStatement { 25 | 26 | @Override 27 | public void accept(Visitor visitor) { 28 | visitor.visit(this); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowPrivileges.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-21) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowPrivileges extends DALShowStatement { 25 | @Override 26 | public void accept(Visitor visitor) { 27 | visitor.visit(this); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowProcesslist.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-21) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowProcesslist extends DALShowStatement { 25 | private final boolean full; 26 | 27 | public ShowProcesslist(boolean full) { 28 | this.full = full; 29 | } 30 | 31 | public boolean isFull() { 32 | return full; 33 | } 34 | 35 | @Override 36 | public void accept(Visitor visitor) { 37 | visitor.visit(this); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowProfiles.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-21) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowProfiles extends DALShowStatement { 25 | 26 | @Override 27 | public void accept(Visitor visitor) { 28 | visitor.visit(this); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowSlaveHosts.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-21) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowSlaveHosts extends DALShowStatement { 25 | 26 | @Override 27 | public void accept(Visitor visitor) { 28 | visitor.visit(this); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/dal/ShowSlaveStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-5-21) 16 | */ 17 | package miniDB.parser.ast.stmt.dal; 18 | 19 | import miniDB.parser.visitor.Visitor; 20 | 21 | /** 22 | * @author QIU Shuo 23 | */ 24 | public class ShowSlaveStatus extends DALShowStatement { 25 | 26 | @Override 27 | public void accept(Visitor visitor) { 28 | visitor.visit(this); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/ddl/DDLCreateLikeStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.ddl; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.visitor.Visitor; 5 | 6 | /** 7 | * CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name 8 | * { LIKE old_tbl_name | (LIKE old_tbl_name) } 9 | * 10 | * @author ZC.CUI 11 | */ 12 | public class DDLCreateLikeStatement extends DDLCreateTableStatement implements DDLStatement { 13 | private final Identifier likeTable; 14 | private String createTableSql; 15 | 16 | public DDLCreateLikeStatement(boolean temporary, boolean ifNotExists, Identifier table, 17 | Identifier likeTable) { 18 | super(temporary, ifNotExists, table); 19 | this.likeTable = likeTable; 20 | } 21 | 22 | public Identifier getLikeTable() { 23 | return likeTable; 24 | } 25 | 26 | public String getCreateTableSql() { 27 | return createTableSql; 28 | } 29 | 30 | public void setCreateTableSql(String createTableSql) { 31 | this.createTableSql = createTableSql; 32 | } 33 | 34 | @Override 35 | public void accept(Visitor visitor) { 36 | visitor.visit(this); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/ddl/DDLDropTriggerStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.ddl; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.visitor.Visitor; 5 | 6 | /** 7 | * 8 | * @author liuhuanting 9 | * @date 2017年11月6日 上午11:44:17 10 | * 11 | */ 12 | public class DDLDropTriggerStatement implements DDLStatement { 13 | private final boolean ifExists; 14 | private final Identifier name; 15 | 16 | public DDLDropTriggerStatement(boolean ifExists, Identifier name) { 17 | this.ifExists = ifExists; 18 | this.name = name; 19 | } 20 | 21 | public boolean isIfExists() { 22 | return ifExists; 23 | } 24 | 25 | public Identifier getName() { 26 | return name; 27 | } 28 | 29 | @Override 30 | public void accept(Visitor visitor) { 31 | visitor.visit(this); 32 | } 33 | 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/ddl/DDLStatement.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | package miniDB.parser.ast.stmt.ddl; 15 | 16 | import miniDB.parser.ast.stmt.SQLStatement; 17 | 18 | /** 19 | * NOT FULL AST 20 | * (created at 2011-7-4) 21 | * @author QIU Shuo 22 | */ 23 | public interface DDLStatement extends SQLStatement { 24 | // QS_TODO ddl regenerate sql by router 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/extension/DropPrepareStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.extension; 2 | 3 | import miniDB.parser.ast.stmt.ddl.DDLStatement; 4 | import miniDB.parser.visitor.Visitor; 5 | 6 | public class DropPrepareStatement implements DDLStatement { 7 | private final String preparedName; 8 | 9 | public DropPrepareStatement(String preparedName) { 10 | this.preparedName = preparedName; 11 | } 12 | 13 | @Override 14 | public void accept(Visitor visitor) {} 15 | 16 | public String getPreparedName() { 17 | return preparedName; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/extension/ExecutePrepareStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.extension; 2 | 3 | import miniDB.parser.ast.expression.Expression; 4 | import miniDB.parser.ast.stmt.SQLStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | import java.util.ArrayList; 8 | 9 | public class ExecutePrepareStatement implements SQLStatement { 10 | 11 | private final String name; 12 | private final ArrayList vars; 13 | 14 | public ExecutePrepareStatement(String name, ArrayList vars) { 15 | this.name = name; 16 | this.vars = vars; 17 | } 18 | 19 | @Override 20 | public void accept(Visitor visitor) { 21 | 22 | } 23 | 24 | public ArrayList getVars() { 25 | return vars; 26 | } 27 | 28 | public String getName() { 29 | return name; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/extension/PrepareStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.extension; 2 | 3 | import miniDB.parser.ast.stmt.SQLStatement; 4 | import miniDB.parser.visitor.Visitor; 5 | 6 | public class PrepareStatement implements SQLStatement { 7 | private final String name; 8 | private final String stmt; 9 | private String[] sqls; 10 | 11 | public PrepareStatement(String stmt_name, String preparable_stmt) { 12 | this.name = stmt_name; 13 | this.stmt = preparable_stmt; 14 | this.sqls = stmt.split("\\?"); 15 | } 16 | 17 | @Override 18 | public void accept(Visitor visitor) {} 19 | 20 | public String getStmt() { 21 | return stmt; 22 | } 23 | 24 | public String getName() { 25 | return name; 26 | } 27 | 28 | public String[] getSqls() { 29 | return sqls; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/mts/MTSCommitStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.mts; 2 | 3 | import miniDB.parser.ast.expression.primary.Identifier; 4 | import miniDB.parser.ast.stmt.SQLStatement; 5 | import miniDB.parser.visitor.Visitor; 6 | 7 | public class MTSCommitStatement implements SQLStatement { 8 | public static enum CompleteType { 9 | /** not specified, then use default */ 10 | UN_DEF, CHAIN, 11 | /** MySQL's default */ 12 | NO_CHAIN, RELEASE, NO_RELEASE 13 | } 14 | 15 | private final CompleteType completeType; 16 | 17 | public MTSCommitStatement(CompleteType completeType) { 18 | if (completeType == null) 19 | throw new IllegalArgumentException("complete type is null!"); 20 | this.completeType = completeType; 21 | } 22 | 23 | public MTSCommitStatement(Identifier savepoint) { 24 | this.completeType = null; 25 | if (savepoint == null) 26 | throw new IllegalArgumentException("savepoint is null!"); 27 | } 28 | 29 | public CompleteType getCompleteType() { 30 | return completeType; 31 | } 32 | 33 | @Override 34 | public void accept(Visitor visitor) { 35 | visitor.visit(this); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/ast/stmt/mts/MTSStartTransactionStatement.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.ast.stmt.mts; 2 | 3 | import miniDB.parser.ast.stmt.SQLStatement; 4 | import miniDB.parser.visitor.Visitor; 5 | 6 | /** 7 | * @author liuhuanting 8 | */ 9 | public class MTSStartTransactionStatement implements SQLStatement { 10 | 11 | public static enum TransactionCharacteristic { 12 | WITH_CONSISTENT_SNAPSHOT, READ_WRITE, READ_ONLY 13 | } 14 | 15 | private final TransactionCharacteristic characteristic; 16 | 17 | public MTSStartTransactionStatement(TransactionCharacteristic characteristic) { 18 | this.characteristic = characteristic; 19 | } 20 | 21 | @Override 22 | public void accept(Visitor visitor) { 23 | visitor.visit(this); 24 | } 25 | 26 | public TransactionCharacteristic getCharacteristic() { 27 | return characteristic; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/util/BinaryOperandCalculator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-7-20) 16 | */ 17 | package miniDB.parser.util; 18 | 19 | import java.math.BigDecimal; 20 | import java.math.BigInteger; 21 | 22 | /** 23 | * @author QIU Shuo 24 | */ 25 | public interface BinaryOperandCalculator { 26 | Number calculate(Integer integer1, Integer integer2); 27 | 28 | Number calculate(Long long1, Long long2); 29 | 30 | Number calculate(BigInteger bigint1, BigInteger bigint2); 31 | 32 | Number calculate(BigDecimal bigDecimal1, BigDecimal bigDecimal2); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/util/Tuple.java: -------------------------------------------------------------------------------- 1 | package miniDB.parser.util; 2 | 3 | /** 4 | * @ClassName: Tuple 5 | * @Description: 元组抽象类 6 | * @author liuhuanting 7 | * @date 2017年8月29日 下午4:40:23 8 | * 9 | */ 10 | public abstract class Tuple { 11 | 12 | @Override 13 | public int hashCode() { 14 | int result = 17; 15 | result = 37 * result + this.hashCode(); 16 | return result; 17 | } 18 | 19 | abstract protected boolean elementEquals(Tuple tuple); 20 | 21 | @Override 22 | public boolean equals(Object object) { 23 | boolean rv = false; 24 | if (!(object instanceof Tuple)) 25 | return false; 26 | if (object == this) 27 | return true; 28 | 29 | Tuple tuple = (Tuple) object; 30 | rv = elementEquals(tuple); 31 | 32 | return rv; 33 | } 34 | 35 | protected boolean same(T a, T b) { 36 | if (a == null) { 37 | if (b == null) { 38 | return true; 39 | } else { 40 | return false; 41 | } 42 | } else if (a.equals(b)) { 43 | return true; 44 | } 45 | return false; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/miniDB/parser/util/UnaryOperandCalculator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2012 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 | * in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the License 10 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 | * or implied. See the License for the specific language governing permissions and limitations under 12 | * the License. 13 | */ 14 | /** 15 | * (created at 2011-7-20) 16 | */ 17 | package miniDB.parser.util; 18 | 19 | import java.math.BigDecimal; 20 | import java.math.BigInteger; 21 | 22 | /** 23 | * @author QIU Shuo 24 | */ 25 | public interface UnaryOperandCalculator { 26 | Number calculate(Integer num); 27 | 28 | Number calculate(Long num); 29 | 30 | Number calculate(BigInteger num); 31 | 32 | Number calculate(BigDecimal num); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/Attribute.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine 2 | 3 | /** 4 | * @author icebigpig 5 | * @date 2022/10/5 11:20 6 | * @version 1.0 7 | */ 8 | 9 | class Attribute(private var colName: String) : ArrayList() { 10 | 11 | 12 | fun serialize() { 13 | 14 | } 15 | 16 | fun deserialize() { 17 | 18 | } 19 | 20 | fun setColName(colName: String) { 21 | this.colName = colName 22 | } 23 | 24 | fun getColName(): String { 25 | return this.colName 26 | } 27 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/StringUtils.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine 2 | 3 | import java.util.* 4 | 5 | class StringUtils { 6 | companion object { 7 | /** 8 | * Test whether a text satisfy the given match pattern 9 | * https://stackoverflow.com/a/898461/7463472 10 | */ 11 | fun like(text: String, matchPattern: String): Boolean { 12 | var expr = matchPattern.lowercase(Locale.getDefault()) // ignoring locale for now 13 | expr = expr.replace(".", "\\.") // "\\" is escaped to "\" (thanks, Alan M) 14 | // ... escape any other potentially problematic characters here 15 | expr = expr.replace("?", ".") 16 | expr = expr.replace("%", ".*") 17 | val str = text.lowercase(Locale.getDefault()) 18 | return str.matches(expr.toRegex()) 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/config/DBConfig.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.config 2 | 3 | /** 4 | * 数据库存储的基本配置项 5 | */ 6 | class DBConfig { 7 | 8 | companion object { 9 | 10 | /** 11 | * 系统文件的目录 12 | */ 13 | const val DB_ROOT_PATH :String = "E:\\MiniDB_Data\\" 14 | 15 | /** 16 | * 系统表位置 17 | */ 18 | const val SYSTEM_FILE:String = DB_ROOT_PATH + "DB_Files\\" 19 | 20 | /** 21 | * 数据表位置 22 | */ 23 | const val DATA_FILE:String = DB_ROOT_PATH + "Data\\" 24 | 25 | /** 26 | * 每一次IO读取的块数 27 | */ 28 | const val IO_LINKED_BLOCK_QUEUE_SIZE:Int = 500 29 | 30 | /** 31 | * 表文件后缀 32 | */ 33 | const val TABLE_SUFFIX:String = ".tb" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/config/DbStorageConfig.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.config 2 | 3 | /** 4 | * 进行实例存储的设置 5 | * 这里按顺序写上存储的定义 6 | */ 7 | class DbStorageConfig { 8 | 9 | companion object { 10 | 11 | /** 12 | * 表头存储分配空间 13 | */ 14 | const val TABLE_HEADER_SIZE = 16 * 1024 15 | 16 | 17 | const val PAGE_SIZE = 16 * 1024 18 | 19 | /** 20 | * 记录是否删除标志为 21 | */ 22 | const val DELETE_FLAG_BIT = 4 23 | 24 | /** 25 | * 插入这条记录的时间戳 26 | */ 27 | const val INSERT_TIME_STAMP = 4 28 | 29 | /** 30 | * 操作过这条记录的事务id 31 | */ 32 | const val TRANSACTION_ID = 4 33 | 34 | /** 35 | * 事务读标记的时间戳 36 | */ 37 | const val READED_TIME_STAMP = 4 38 | 39 | /** 40 | * 事务写标记的时间戳 41 | */ 42 | const val UPDATE_TIME_STAMP = 4 43 | 44 | 45 | fun getTotalByteLen(): Int { 46 | return DELETE_FLAG_BIT + 47 | INSERT_TIME_STAMP + 48 | TRANSACTION_ID + 49 | READED_TIME_STAMP + 50 | UPDATE_TIME_STAMP 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/index/Dictionary.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.index 2 | 3 | import miniDB.index.BPTree 4 | import java.io.BufferedReader 5 | import java.io.FileReader 6 | import java.io.IOException 7 | import java.util.* 8 | 9 | class Dictionary { 10 | // testing purpose 11 | private val dictionay: BPTree = BPTree(200, 200, 3) 12 | 13 | @Throws(IOException::class) 14 | fun loadDic(path: String?) { 15 | val fr = FileReader(path) 16 | val r = BufferedReader(fr) 17 | var s = r.readLine() 18 | val dic = ArrayList() 19 | val record = ArrayList() 20 | var count = 0 21 | while (s != null) { 22 | dic.add(s.lowercase(Locale.getDefault())) 23 | record.add(s.lowercase(Locale.getDefault())) 24 | s = r.readLine() 25 | count++ 26 | } 27 | println(count) 28 | dictionay.insertBulk(dic, record) 29 | } 30 | 31 | fun search(s: String): Boolean { 32 | val n: Node? = dictionay.search(s.lowercase(Locale.getDefault())) 33 | return n != null 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/index/Node.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.index 2 | 3 | 4 | class Node(var nodeSize: Int, public var isLeaf: Boolean) { 5 | var keys: ArrayList = ArrayList() 6 | var pointers: ArrayList = ArrayList() 7 | var next: Node? = null 8 | var prev: Node? = null 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/index/bptree/MainDataConfiguration.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.index.bptree 2 | 3 | import java.lang.reflect.Type 4 | 5 | class MainDataConfiguration(types: ArrayList, sizes: ArrayList, colIDs: ArrayList): 6 | Configuration(0, types, sizes, colIDs) { 7 | 8 | var nValidPointerInFreePage: Int 9 | 10 | init { 11 | // pad keysize to multiples of 16 12 | val BASE = 16 13 | var tmpSize = keySize 14 | tmpSize += 8 // space for `RowID` 15 | if (tmpSize % BASE != 0) { 16 | tmpSize += BASE - tmpSize % BASE 17 | } 18 | pageSize = Math.max(32, tmpSize) 19 | nValidPointerInFreePage = pageSize / 8 - 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/Schema.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory 2 | 3 | import java.util.concurrent.ConcurrentHashMap 4 | 5 | class Schema(schemaName: String) { 6 | val views = ConcurrentHashMap() 7 | 8 | operator fun set(name: String, view: View) { 9 | views[name] = view 10 | } 11 | 12 | operator fun set(name: String, table: Table) { 13 | views[name] = table 14 | } 15 | operator fun get(name: String) : View 16 | = views[name] ?: throw RuntimeException("View $name does not exist.") 17 | 18 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/View.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory 2 | 3 | import com.lss233.minidb.engine.Cell 4 | import com.lss233.minidb.engine.NTuple 5 | import com.lss233.minidb.engine.Relation 6 | import miniDB.parser.ast.expression.Expression 7 | import java.util.function.Predicate 8 | 9 | abstract class View { 10 | abstract fun getRelation(): Relation 11 | fun getRelation(alias: String): Relation { 12 | val ret = getRelation() 13 | ret.alias = alias 14 | return ret 15 | } 16 | 17 | open fun insert(row: Array) { 18 | throw UnsupportedOperationException("Cannot perform insert on view") 19 | } 20 | open fun insert(row: NTuple) { 21 | throw UnsupportedOperationException("Cannot perform insert on view") 22 | } 23 | open fun update(cond: Predicate, updated: Array>): Int { 24 | throw UnsupportedOperationException("Cannot perform update on view") 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/AttributeView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.memory.Database 4 | import com.lss233.minidb.engine.schema.Column 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 6 | 7 | class AttributeView(database: Database): PostgresCatalogView(database) { 8 | override fun getColumns(): MutableList 9 | = mutableListOf( 10 | Column("attrelid", DataType.DataTypeName.INT), Column("attname", DataType.DataTypeName.CHAR), 11 | Column("atttypid", DataType.DataTypeName.INT), Column("attstattarget", DataType.DataTypeName.CHAR), 12 | Column("attlen", DataType.DataTypeName.CHAR), Column("attnum", DataType.DataTypeName.CHAR), 13 | Column("attndims", DataType.DataTypeName.CHAR), Column("attcacheoff", DataType.DataTypeName.CHAR), 14 | Column("attbyval", DataType.DataTypeName.CHAR) 15 | ) 16 | 17 | override fun generateData(): MutableList> 18 | = mutableListOf() 19 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/IndexView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.memory.Database 4 | import com.lss233.minidb.engine.schema.Column 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 6 | 7 | class IndexView(database: Database): PostgresCatalogView(database) { 8 | override fun getColumns(): MutableList 9 | = mutableListOf( 10 | Column("indexrelid", DataType.DataTypeName.INT), Column("indrelid", DataType.DataTypeName.INT), 11 | Column("indnatts", DataType.DataTypeName.CHAR) 12 | ) 13 | 14 | override fun generateData(): MutableList> 15 | = mutableListOf() 16 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/InheritsView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.memory.Database 4 | import com.lss233.minidb.engine.schema.Column 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 6 | 7 | class InheritsView(database: Database): PostgresCatalogView(database) { 8 | override fun getColumns(): MutableList 9 | = mutableListOf( 10 | Column("inhrelid", DataType.DataTypeName.INT), Column("inhparent", DataType.DataTypeName.CHAR), 11 | Column("inhseqno", DataType.DataTypeName.CHAR) 12 | ) 13 | 14 | override fun generateData(): MutableList> 15 | = mutableListOf() 16 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/NamespaceView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.memory.Database 4 | import com.lss233.minidb.engine.schema.Column 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 6 | 7 | class NamespaceView(database: Database) : PostgresCatalogView(database) { 8 | override fun getColumns(): MutableList 9 | = mutableListOf( 10 | Column("oid", DataType.DataTypeName.INT), Column("nspname", DataType.DataTypeName.CHAR), 11 | Column("nspower", DataType.DataTypeName.CHAR), Column("nspacl", DataType.DataTypeName.CHAR) 12 | ) 13 | 14 | override fun generateData(): MutableList> 15 | = mutableListOf( 16 | arrayOf("pg_catalog", "pg_catalog", "10", "{postgres=UC/postgres,=U/postgres}"), 17 | arrayOf("public", "public", "10", "{postgres=UC/postgres,=U/postgres}"), 18 | ) 19 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/OpclassView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.memory.Database 4 | import com.lss233.minidb.engine.schema.Column 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 6 | 7 | class OpclassView(database: Database) : PostgresCatalogView(database) { 8 | override fun getColumns(): MutableList 9 | = mutableListOf( 10 | Column("oid", DataType.DataTypeName.INT), 11 | Column("opcmethod", DataType.DataTypeName.INT), 12 | Column("opcname", DataType.DataTypeName.TEXT), 13 | Column("opcnamespace", DataType.DataTypeName.INT), 14 | Column("opcowner", DataType.DataTypeName.INT), 15 | Column("opcfamily", DataType.DataTypeName.INT), 16 | Column("opcdefault", DataType.DataTypeName.BOOLEAN), 17 | Column("opckeytype", DataType.DataTypeName.INT) 18 | ) 19 | 20 | override fun generateData(): MutableList> 21 | = mutableListOf() 22 | 23 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/PostgresCatalogView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.Relation 4 | import com.lss233.minidb.engine.memory.Database 5 | import com.lss233.minidb.engine.memory.View 6 | import com.lss233.minidb.engine.schema.Column 7 | 8 | /** 9 | * View in pg_catalog schema 10 | */ 11 | abstract class PostgresCatalogView(val database: Database): View() { 12 | 13 | protected abstract fun getColumns(): MutableList 14 | protected abstract fun generateData(): MutableList> 15 | 16 | override fun getRelation(): Relation 17 | = Relation(getColumns(), generateData()) 18 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/RewriteView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.memory.Database 4 | import com.lss233.minidb.engine.schema.Column 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 6 | 7 | class RewriteView(database: Database) : PostgresCatalogView(database) { 8 | override fun getColumns(): MutableList 9 | = mutableListOf( 10 | Column("oid", DataType.DataTypeName.INT), 11 | Column("rulename", DataType.DataTypeName.VARCHAR), 12 | Column("ev_class", DataType.DataTypeName.INT), 13 | Column("ev_type", DataType.DataTypeName.CHAR), 14 | Column("ev_enabled", DataType.DataTypeName.CHAR), 15 | Column("is_instead", DataType.DataTypeName.BOOLEAN), 16 | Column("ev_equal", DataType.DataTypeName.JSON), 17 | Column("ev_action", DataType.DataTypeName.JSON) 18 | ) 19 | 20 | override fun generateData(): MutableList> 21 | = mutableListOf() 22 | 23 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/TablespaceView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.memory.Database 4 | import com.lss233.minidb.engine.schema.Column 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 6 | 7 | class TablespaceView(database: Database): PostgresCatalogView(database) { 8 | override fun getColumns(): MutableList 9 | = mutableListOf( 10 | Column("oid", DataType.DataTypeName.INT), 11 | Column("spcname", DataType.DataTypeName.CHAR), 12 | Column("spcowner", DataType.DataTypeName.CHAR), 13 | Column("spcacl", DataType.DataTypeName.CHAR), 14 | Column("spcoptions", DataType.DataTypeName.CHAR) 15 | ) 16 | 17 | override fun generateData(): MutableList> 18 | = mutableListOf( 19 | arrayOf("1", "default_tablespace", "1", "", "") 20 | ) 21 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/catalog/TypeView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.catalog 2 | 3 | import com.lss233.minidb.engine.memory.Database 4 | import com.lss233.minidb.engine.schema.Column 5 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 6 | 7 | class TypeView(database: Database): PostgresCatalogView(database) { 8 | override fun getColumns(): MutableList 9 | = mutableListOf( 10 | Column("oid", DataType.DataTypeName.INT), 11 | Column("typname", DataType.DataTypeName.CHAR), 12 | Column("typnamespace", DataType.DataTypeName.CHAR), 13 | Column("typowner", DataType.DataTypeName.CHAR), 14 | Column("typlen", DataType.DataTypeName.CHAR), 15 | Column("typbyval", DataType.DataTypeName.CHAR), 16 | Column("typtype", DataType.DataTypeName.CHAR), 17 | Column("typcategory", DataType.DataTypeName.CHAR), 18 | Column("typdelim", DataType.DataTypeName.CHAR), 19 | Column("typndims", DataType.DataTypeName.CHAR) 20 | ) 21 | 22 | override fun generateData(): MutableList> 23 | = mutableListOf() 24 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/information/ColumnsView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.information 2 | 3 | import com.lss233.minidb.engine.schema.Column 4 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 5 | 6 | class ColumnsView(): InformationSchemaView() { 7 | override fun getColumns(): MutableList 8 | = mutableListOf( 9 | Column("table_catalog", DataType.DataTypeName.CHAR), Column("table_schema", DataType.DataTypeName.CHAR), 10 | Column("table_name", DataType.DataTypeName.CHAR), Column("column_name", DataType.DataTypeName.CHAR), 11 | Column("ordinal_position", DataType.DataTypeName.CHAR), Column("udt_catalog", DataType.DataTypeName.CHAR), 12 | Column("udt_schema", DataType.DataTypeName.CHAR), Column("udt_name", DataType.DataTypeName.CHAR) 13 | ) 14 | 15 | override fun generateData(): MutableList> 16 | = mutableListOf() 17 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/information/InformationSchemaView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.information 2 | 3 | import com.lss233.minidb.engine.Relation 4 | import com.lss233.minidb.engine.memory.View 5 | import com.lss233.minidb.engine.schema.Column 6 | 7 | /** 8 | * View in information_schema schema 9 | */ 10 | abstract class InformationSchemaView: View() { 11 | 12 | protected abstract fun getColumns(): MutableList 13 | protected abstract fun generateData(): MutableList> 14 | 15 | override fun getRelation(): Relation 16 | = Relation(getColumns(), generateData()) 17 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/information/ParametersView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.information 2 | 3 | import com.lss233.minidb.engine.schema.Column 4 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 5 | 6 | class ParametersView(): InformationSchemaView() { 7 | override fun getColumns(): MutableList 8 | = mutableListOf( 9 | Column("specific_schema", DataType.DataTypeName.CHAR), Column("specific_name", DataType.DataTypeName.CHAR), 10 | Column("routine_catalog", DataType.DataTypeName.CHAR), Column("ordinal_position", DataType.DataTypeName.CHAR), 11 | Column("parameter_mode", DataType.DataTypeName.CHAR), Column("is_result", DataType.DataTypeName.CHAR), 12 | Column("as_locator", DataType.DataTypeName.CHAR), Column("parameter_name", DataType.DataTypeName.CHAR), 13 | Column("data_type", DataType.DataTypeName.CHAR) 14 | ) 15 | 16 | override fun generateData(): MutableList> 17 | = mutableListOf() 18 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/memory/internal/information/RoutinesView.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.memory.internal.information 2 | 3 | import com.lss233.minidb.engine.schema.Column 4 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 5 | 6 | class RoutinesView: InformationSchemaView() { 7 | override fun getColumns(): MutableList 8 | = mutableListOf( 9 | Column("specific_schema", DataType.DataTypeName.CHAR), Column("specific_name", DataType.DataTypeName.CHAR), 10 | Column("routine_catalog", DataType.DataTypeName.CHAR), Column("routine_schema", DataType.DataTypeName.CHAR), 11 | Column("routine_name", DataType.DataTypeName.CHAR), Column("routine_type", DataType.DataTypeName.CHAR), 12 | Column("module_catalog", DataType.DataTypeName.CHAR), Column("data_type", DataType.DataTypeName.CHAR) 13 | ) 14 | 15 | override fun generateData(): MutableList> 16 | = mutableListOf() 17 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/scheduleTask/StorageTask.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.scheduleTask 2 | 3 | import com.lss233.minidb.engine.memory.Engine 4 | import java.util.* 5 | 6 | 7 | class StorageTask : TimerTask() { 8 | 9 | override fun run() { 10 | println("save action") 11 | Engine.dataStorage() 12 | } 13 | 14 | } 15 | 16 | //fun main() { 17 | // val task = StorageTask() 18 | // Timer().schedule(task, Date(), 1000) 19 | //} 20 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/executor/Delete.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.executor 2 | 3 | class Delete { 4 | 5 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/executor/Update.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.executor 2 | 3 | class Update { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/io/DbRandomAccessIo.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.io 2 | 3 | /** 4 | * 底层io实现,归io线程管理,使用RandomAccessFile 5 | */ 6 | class DbRandomAccessIo { 7 | 8 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/page/Page.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.page 2 | 3 | /** 4 | * 页表 5 | * 每张页存16KB的数据 6 | */ 7 | class Page { 8 | 9 | /** 10 | * 页号 11 | */ 12 | var pageId:Int ?= null 13 | 14 | /** 15 | * 记录总数 16 | */ 17 | var recordNum:Int ?= null 18 | 19 | /** 20 | * 最小的ID号 21 | */ 22 | var minId:Int ?= null 23 | 24 | /** 25 | * 最大的ID号 26 | */ 27 | var maxId:Int ?= null 28 | 29 | /** 30 | * 已用的空间 31 | */ 32 | var usedSpace:Int ?= null 33 | 34 | /** 35 | * 文件中开始的byte位 36 | */ 37 | var beginByte:Int ?= null 38 | 39 | /** 40 | * 文件中结束的byte位 41 | */ 42 | var endByte:Int ?= null 43 | 44 | /** 45 | * 当前页存储的数据 46 | */ 47 | var data:ByteArray ?= null 48 | 49 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/page/Segment.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.page 2 | 3 | /** 4 | * 段表 5 | * 每个段表可以存500个页表 6 | */ 7 | class Segment { 8 | 9 | /** 10 | * 段表号 11 | */ 12 | var segmentId = 0 13 | 14 | /** 15 | * 页数 16 | */ 17 | var pageNum = 0 18 | 19 | /** 20 | * 已用空间 21 | */ 22 | var usedSpace = 0 23 | 24 | /** 25 | * 最小页号数 26 | */ 27 | var minId = 0 28 | 29 | /** 30 | * 最大页号数 31 | */ 32 | var maxId = 0 33 | 34 | /** 35 | * 当前段内的页数据 36 | */ 37 | var pages: ArrayList? = null 38 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/result/DBResultType.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.result 2 | 3 | enum class DBResultType { 4 | INSERT, SELECT, DELETE, UPDATE 5 | } 6 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/struct/DbInfo.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.struct 2 | 3 | /** 4 | * 记录数据库的基本信息 5 | */ 6 | class DbInfo { 7 | 8 | private class TableInfo { 9 | /** 10 | * 这张表有多少条记录 11 | */ 12 | var recordNum = 0 13 | 14 | /** 15 | * 这张表占多少kb 16 | */ 17 | var tableKBLen = 0 18 | } 19 | 20 | private val infoMap = HashMap() 21 | 22 | fun add(tableName: String, recordNum: Int, tableKBLen: Int) { 23 | val info = TableInfo() 24 | info.recordNum = recordNum 25 | info.tableKBLen = tableKBLen 26 | infoMap[tableName] = info 27 | } 28 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/struct/DbStruct.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.struct 2 | 3 | /** 4 | * 存储数据库的基本信息 5 | * 该类用于管理整个db的信息,是整个存储信息的核心,主要由sql解析器进行调用,生成ioTask 6 | * 初始化流程 7 | * 逐个读取表文件,TODO:这里需要先验证 check一下有效性 8 | * 1.生成数据库表信息,key是表名、po存储:表的所有字段以及字段的长度。 9 | * 2.生成数据库元信息,插入map。 10 | * 3.将12生成的东西插入dbs。 11 | */ 12 | class DbStruct { 13 | 14 | companion object { 15 | 16 | @JvmStatic 17 | //key:数据库名 v:库内表结构 18 | var dbs = HashMap>() 19 | 20 | @JvmStatic 21 | fun add(dbName: String, tableInfo: HashMap) { 22 | dbs.put(dbName, tableInfo) 23 | } 24 | 25 | @JvmStatic 26 | fun getTableStructByName(dbName: String, tableName: String): DbTableStruct? { 27 | return dbs[dbName]?.get(tableName) 28 | } 29 | 30 | // TODO 设计问题 以后要改成真正的获取最大id而不是自增 31 | @JvmStatic 32 | fun getTableMaxId(dbName: String, tableName: String): Int { 33 | return dbs[dbName]!![tableName]!!.recordNum + 1 34 | } 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/struct/DbTableField.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.struct 2 | 3 | import miniDB.parser.ast.fragment.ddl.datatype.DataType.DataTypeName 4 | 5 | /** 6 | * 定义字段的实体 7 | * @param filedName 字段名 8 | */ 9 | class DbTableField constructor(var filedName: String){ 10 | 11 | /** 12 | * byte长度 13 | */ 14 | var byteLen: Int = 0 15 | 16 | /** 17 | * 存储类型 18 | */ 19 | var type: DataTypeName? = null 20 | 21 | /** 22 | * 是否为主键 23 | */ 24 | var isPrimaryKey = false 25 | 26 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/struct/DbTableStruct.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.struct 2 | 3 | import com.lss233.minidb.engine.storage.type.StoredType 4 | 5 | class DbTableStruct { 6 | 7 | /** 8 | * 表名 9 | */ 10 | var tableName: String? = null 11 | get() { 12 | // TODO 以后改成返回真正的文件名 预计: 库名_表名.tb 13 | return field 14 | } 15 | 16 | /** 17 | * 记录数 18 | */ 19 | var recordNum: Int = 0 20 | 21 | /** 22 | * 字段信息 23 | */ 24 | var fields: ArrayList? = null 25 | 26 | /** 27 | * 该记录的byte长度 28 | */ 29 | var recordLen: Int = 0 30 | 31 | /** 32 | * 字段数 33 | */ 34 | var fieldNum: Int = 0 35 | 36 | 37 | var maxPK: Int = 0 38 | 39 | 40 | var fieldNameList = ArrayList() 41 | 42 | 43 | var fieldTypeList = ArrayList() 44 | 45 | 46 | var fieldLensList = ArrayList() 47 | 48 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/struct/SelectRange.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.struct 2 | 3 | /** 4 | * 定义查询范围 5 | */ 6 | class SelectRange { 7 | class Range { 8 | var begin = 0 9 | var end = 0 10 | } 11 | 12 | var ranges: List = ArrayList() 13 | var size = 0 14 | } 15 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/struct/TableHeader.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.struct 2 | 3 | import com.lss233.minidb.engine.schema.Column 4 | import miniDB.parser.ast.fragment.ddl.datatype.DataType 5 | 6 | class TableHeader constructor(val tableName: String) { 7 | 8 | // TODO recode user & other basic info ? 9 | 10 | /** 11 | * 行数记录 12 | */ 13 | var recordNumber: Int = 0 14 | 15 | 16 | var columns = mutableListOf() 17 | 18 | fun addColumn(column: Column) { 19 | this.columns.add(column) 20 | } 21 | 22 | fun getColumnStorageSize(): Int { 23 | var size = 0 24 | 25 | for (item in columns) { 26 | size += DataType.getTypeSize(item.definition.dataType.typeName) 27 | } 28 | return size 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/type/StoredType.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.type 2 | 3 | /** 4 | * 定义存储类型 5 | */ 6 | enum class StoredType { 7 | INT, BIGINT, CHAR, VARCHAR, DATA_TIME, TIME_STAMP 8 | } 9 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/storage/type/TypeLen.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.storage.type 2 | 3 | /** 4 | * 定义类型的byte长度 5 | */ 6 | class TypeLen { 7 | 8 | companion object { 9 | 10 | const val INTEGER = 4 11 | 12 | const val BIGINT = 8 13 | 14 | const val DATA_TIME = 8 15 | 16 | const val TIME_STAMP = 8 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/visitor/DropTableStatementVisitor.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.visitor 2 | 3 | import miniDB.parser.ast.stmt.ddl.DDLDropTableStatement 4 | 5 | class DropTableStatementVisitor: SelectStatementVisitor() { 6 | override fun visit(node: DDLDropTableStatement) { 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/engine/visitor/UpdateStatementVisitor.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.engine.visitor 2 | 3 | import com.lss233.minidb.engine.Cell 4 | import com.lss233.minidb.engine.NTuple 5 | import com.lss233.minidb.engine.memory.Table 6 | import com.lss233.minidb.engine.schema.Column 7 | import miniDB.parser.ast.stmt.dml.DMLUpdateStatement 8 | import java.util.function.Predicate 9 | 10 | class UpdateStatementVisitor: SelectStatementVisitor() { 11 | var affects = 0 12 | override fun visit(node: DMLUpdateStatement) { 13 | node.tableRefs.accept(this) 14 | val table = stack.pop() as Table 15 | node.where.accept(this) 16 | val cond = stack.pop() as Predicate 17 | val updated = node.values.map { Cell(Column(it.key), it.value) }.toTypedArray() 18 | affects = table.update(cond, updated) 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/exception/MiniDBException.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.exception 2 | 3 | class MiniDBException(m: String) : RuntimeException(m) { 4 | companion object { 5 | var StringLengthOverflow = "String Length Exceeds the limits! The limit is %d (bytes) " + 6 | "and the string (%s) has a length of %d." 7 | var DuplicateValue = "Duplicate value (%s) for the same key (%s)!" 8 | var UnknownColumnType = "Unknown column type (%s). " + 9 | "Only Integer, Long, Float, Double and String are supported!" 10 | var InvalidBPTreeState = "Internal error! Invalid B+ tree state." 11 | var BadNodeType = "Internal error! Bad node type." 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/PostgresProtocolInitializer.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking 2 | 3 | import com.lss233.minidb.networking.codec.PostgreSQLDecoder 4 | import com.lss233.minidb.networking.codec.PostgreSQLEncoder 5 | import com.lss233.minidb.networking.handler.postgres.TerminateHandler 6 | import com.lss233.minidb.networking.handler.postgres.query.QueryHandler 7 | import com.lss233.minidb.networking.handler.postgres.startup.SSLRequestRejectHandler 8 | import com.lss233.minidb.networking.handler.postgres.startup.StartupMessageHandler 9 | import io.netty.channel.ChannelInitializer 10 | import io.netty.channel.socket.SocketChannel 11 | 12 | class PostgresProtocolInitializer() : ChannelInitializer() { 13 | 14 | @Throws(Exception::class) 15 | public override fun initChannel(ch: SocketChannel) { 16 | val session = Session() 17 | val pipeline = ch.pipeline() 18 | pipeline.addLast(PostgreSQLDecoder(session), PostgreSQLEncoder(session)) 19 | pipeline.addLast(SSLRequestRejectHandler(session), StartupMessageHandler(session)) 20 | pipeline.addLast(QueryHandler(session)) 21 | pipeline.addLast(TerminateHandler(session)) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/Session.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking 2 | 3 | open class Session { 4 | var state = State.Startup 5 | var user: String? = null 6 | var database: String? = null 7 | val properties = HashMap() 8 | var packetSequenceId = -1 9 | enum class State { 10 | Startup, Authenticating, Query, Terminated 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/codec/PostgreSQLEncoder.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.codec 2 | 3 | import com.lss233.minidb.networking.Session 4 | import com.lss233.minidb.networking.packets.postgres.MessageType 5 | import com.lss233.minidb.networking.packets.postgres.OutgoingPacket 6 | import io.netty.buffer.ByteBuf 7 | import io.netty.buffer.Unpooled 8 | import io.netty.channel.ChannelHandlerContext 9 | import io.netty.handler.codec.MessageToByteEncoder 10 | 11 | class PostgreSQLEncoder(private val session: Session) : MessageToByteEncoder() { 12 | override fun encode(ctx: ChannelHandlerContext?, msg: OutgoingPacket?, out: ByteBuf?) { 13 | val mType = msg?.javaClass?.simpleName?.let { MessageType.valueOf(it) } 14 | 15 | val buf = Unpooled.buffer() 16 | msg?.write(buf) 17 | 18 | val type = mType?.type?.toInt() ?: '?'.code 19 | // '?' 代表未知标识符 20 | val len = buf.writerIndex() + 4 21 | println("<- ${msg?.javaClass?.simpleName}(${type.toChar()}) len $len") 22 | 23 | out?.writeByte(type) 24 | out?.writeInt(len) 25 | out?.writeBytes(buf, buf.writerIndex()) 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/handler/mysql/command/ChangeDatabaseHandler.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.handler.mysql.command 2 | 3 | import com.lss233.minidb.networking.packets.mysql.ChangeDatabase 4 | import com.lss233.minidb.networking.packets.mysql.OKPacket 5 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 6 | import io.netty.channel.ChannelHandlerContext 7 | import io.netty.channel.SimpleChannelInboundHandler 8 | 9 | class ChangeDatabaseHandler(private val session: MySQLSession): SimpleChannelInboundHandler() { 10 | override fun channelRead0(ctx: ChannelHandlerContext?, msg: ChangeDatabase?) { 11 | // TODO: permission check 12 | println("User database changed from ${session.database} to ${msg?.database}") 13 | session.database = msg?.database 14 | ctx?.writeAndFlush(OKPacket())?.sync() 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/handler/mysql/command/ShowFieldsHandler.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.handler.mysql.command 2 | 3 | import com.lss233.minidb.networking.packets.mysql.OKPacket 4 | import com.lss233.minidb.networking.packets.mysql.RequestShowFields 5 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 6 | import io.netty.channel.ChannelHandlerContext 7 | import io.netty.channel.SimpleChannelInboundHandler 8 | 9 | /** 10 | * COM_FIELD_LIST 11 | * https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_com_field_list.html#sect_protocol_com_field_list_response 12 | */ 13 | class ShowFieldsHandler(private val session: MySQLSession): SimpleChannelInboundHandler() { 14 | override fun channelRead0(ctx: ChannelHandlerContext?, msg: RequestShowFields?) { 15 | // TODO: permission check 16 | println("User request show fields on db: ${session.database} table ${msg?.table}") 17 | ctx?.writeAndFlush(OKPacket())?.sync() 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/handler/postgres/TerminateHandler.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.handler.postgres 2 | 3 | import com.lss233.minidb.networking.Session 4 | import com.lss233.minidb.networking.packets.postgres.Terminate 5 | import io.netty.channel.ChannelHandlerContext 6 | import io.netty.channel.SimpleChannelInboundHandler 7 | 8 | class TerminateHandler(private val session: Session) : SimpleChannelInboundHandler(){ 9 | override fun channelRead0(ctx: ChannelHandlerContext?, msg: Terminate?) { 10 | session.state = Session.State.Terminated 11 | ctx?.close()?.syncUninterruptibly() 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/handler/postgres/startup/SSLRequestRejectHandler.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.handler.postgres.startup 2 | 3 | import com.lss233.minidb.networking.Session 4 | import com.lss233.minidb.networking.packets.postgres.SSLRequest 5 | import io.netty.buffer.Unpooled 6 | import io.netty.channel.ChannelHandlerContext 7 | import io.netty.channel.SimpleChannelInboundHandler 8 | import java.nio.charset.StandardCharsets 9 | 10 | class SSLRequestRejectHandler(private val session: Session) : SimpleChannelInboundHandler() { 11 | override fun channelRead0(ctx: ChannelHandlerContext?, msg: SSLRequest?) { 12 | ctx?.writeAndFlush(Unpooled.copiedBuffer("N", StandardCharsets.UTF_8))?.sync() 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/mysql/ChangeDatabase.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.mysql 2 | 3 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 4 | import com.lss233.minidb.networking.utils.MySQLBufWrapper 5 | 6 | class ChangeDatabase: IncomingPacket { 7 | var database: String? = null 8 | override fun parse(`in`: MySQLBufWrapper, session: MySQLSession): IncomingPacket { 9 | database = `in`.readStringEOF() 10 | return this 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/mysql/EOFPacket.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.mysql 2 | 3 | import com.lss233.minidb.networking.protocol.mysql.CapabilitiesFlags 4 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 5 | import com.lss233.minidb.networking.utils.MySQLBufWrapper 6 | 7 | class EOFPacket( 8 | private val warnings: Int = 0, 9 | private val statusFlags: Int = 0x0200 10 | ): OutgoingPacket { 11 | override fun write(out: MySQLBufWrapper, session: MySQLSession): OutgoingPacket { 12 | out.writeInt1(0xFE) 13 | if(CapabilitiesFlags.hasCapability(session.clientFlags, CapabilitiesFlags.CLIENT_RESERVED)) { 14 | out.writeInt2(warnings) 15 | out.writeInt2(statusFlags) 16 | } 17 | return this 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/mysql/ERRPacket.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.mysql 2 | 3 | import com.lss233.minidb.networking.protocol.mysql.CapabilitiesFlags 4 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 5 | import com.lss233.minidb.networking.utils.MySQLBufWrapper 6 | 7 | class ERRPacket( 8 | private val errorCode: Int, 9 | private val sqlStateMarker: String, 10 | private val sqlState: String, 11 | private val errorMessage: String 12 | ): OutgoingPacket { 13 | override fun write(out: MySQLBufWrapper, session: MySQLSession): OutgoingPacket { 14 | out.writeInt1(0xFF) 15 | out.writeInt2(errorCode) 16 | if(CapabilitiesFlags.hasCapability(session.clientFlags, CapabilitiesFlags.CLIENT_PROTOCOL_41)) { 17 | out.writeStringFixedLength(sqlStateMarker, 1) 18 | out.writeStringFixedLength(sqlState, 5) 19 | } 20 | out.writeStringEOF(errorMessage) 21 | return this 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/mysql/MessageType.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.mysql 2 | 3 | import kotlin.reflect.KClass 4 | 5 | enum class MessageType(val type: Byte, val `class`: KClass) { 6 | UnknownPacket(0, HandshakeV10::class), 7 | HandshakePacket(0, HandshakeV10::class), 8 | HandshakeResponsePacket(0, HandshakeResponse41::class), 9 | COM_INIT_DB(0x02, ChangeDatabase::class), 10 | COM_QUERY(0x03, RequestQuery::class), 11 | COM_FIELD_LIST(0x04, RequestShowFields::class), 12 | ; 13 | 14 | 15 | companion object { 16 | 17 | fun getType(type: Byte): MessageType { 18 | for (value in values()) { 19 | if(value.type == type) { 20 | return value 21 | } 22 | } 23 | return UnknownPacket 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/mysql/MySQLPacket.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.mysql 2 | 3 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 4 | import com.lss233.minidb.networking.utils.MySQLBufWrapper 5 | 6 | interface MySQLPacket { 7 | } 8 | interface OutgoingPacket: MySQLPacket { 9 | fun write(`out`: MySQLBufWrapper, session: MySQLSession): OutgoingPacket 10 | } 11 | interface IncomingPacket: MySQLPacket { 12 | fun parse(`in`: MySQLBufWrapper, session: MySQLSession): IncomingPacket 13 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/mysql/RequestShowFields.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.mysql 2 | 3 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 4 | import com.lss233.minidb.networking.utils.MySQLBufWrapper 5 | 6 | class RequestShowFields: IncomingPacket { 7 | var table: String? = null 8 | var wildcard: String? = null 9 | override fun parse(`in`: MySQLBufWrapper, session: MySQLSession): IncomingPacket { 10 | table = `in`.readStringNullTerminated() 11 | wildcard = `in`.readStringEOF() 12 | return this 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/mysql/TextResultsetIndicator.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.mysql 2 | 3 | import com.lss233.minidb.networking.protocol.mysql.CapabilitiesFlags 4 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 5 | import com.lss233.minidb.networking.utils.MySQLBufWrapper 6 | 7 | class TextResultsetIndicator( 8 | private val metadataFollows: Boolean, 9 | private val columnCount: Int, 10 | ): OutgoingPacket { 11 | override fun write(out: MySQLBufWrapper, session: MySQLSession): OutgoingPacket { 12 | if(CapabilitiesFlags.hasCapability(session.clientFlags, CapabilitiesFlags.CLIENT_OPTIONAL_RESULTSET_METADATA)) { 13 | out.writeInt1(if(metadataFollows) 1 else 0) 14 | } 15 | out.writeIntLengthEncoded(columnCount.toULong()) 16 | return this 17 | } 18 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/mysql/TextResultsetRow.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.mysql 2 | 3 | import com.lss233.minidb.networking.protocol.mysql.MySQLSession 4 | import com.lss233.minidb.networking.utils.MySQLBufWrapper 5 | 6 | class TextResultsetRow(private val row: Array): OutgoingPacket { 7 | override fun write(out: MySQLBufWrapper, session: MySQLSession): OutgoingPacket { 8 | for(field in row) { 9 | if(field == null) { 10 | out.buf.writeByte(0xFB) 11 | } else { 12 | out.writeStringLengthEncoded(field.toString()) 13 | } 14 | } 15 | return this 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/AuthenticationOk.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | 5 | class AuthenticationOk: OutgoingPacket { 6 | private val success = 0; 7 | override fun write(buf: ByteBuf): OutgoingPacket { 8 | buf.writeInt(success) 9 | return this 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/AuthenticationSASL.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | import java.nio.charset.StandardCharsets 5 | 6 | class AuthenticationSASL(private val methods: List): OutgoingPacket { 7 | override fun write(buf: ByteBuf): OutgoingPacket { 8 | for (method in methods) { 9 | buf.writeCharSequence(method, StandardCharsets.UTF_8) 10 | } 11 | buf.writeByte(0) 12 | return this 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/CommandComplete.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | import java.nio.charset.StandardCharsets 5 | 6 | class CommandComplete(private val tag: String): OutgoingPacket { 7 | 8 | override fun write(buf: ByteBuf): OutgoingPacket { 9 | buf.writeCharSequence(tag, StandardCharsets.UTF_8) 10 | buf.writeByte(0) 11 | return this 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/DataRow.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | 5 | class DataRow(val columnData: Array): OutgoingPacket { 6 | override fun write(buf: ByteBuf): OutgoingPacket { 7 | buf.writeShort(columnData.size) 8 | for(col in columnData) { 9 | if(col.bytes == null) { 10 | buf.writeInt(-1) 11 | } else { 12 | buf.writeInt(col.bytes.size) 13 | buf.writeBytes(col.bytes) 14 | } 15 | } 16 | return this 17 | } 18 | class ColumnData(val bytes: ByteArray?) { 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/EmptyQueryResponse.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | 5 | class EmptyQueryResponse: OutgoingPacket { 6 | override fun write(buf: ByteBuf): OutgoingPacket { 7 | return this 8 | } 9 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/NotificationResponse.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | import java.nio.charset.StandardCharsets 5 | 6 | class NotificationResponse: IncomingPacket { 7 | var processId: Int? = null; 8 | var channel: String? = null; 9 | var payload: String? = null; 10 | 11 | override fun parse(buf: ByteBuf): IncomingPacket { 12 | processId = buf.readInt() 13 | channel = buf.toString(StandardCharsets.UTF_8) 14 | payload = buf.toString(StandardCharsets.UTF_8) 15 | return this 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/ParameterStatus.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | import java.nio.charset.StandardCharsets 5 | 6 | class ParameterStatus(private val key: String, private val value: String): OutgoingPacket { 7 | override fun write(buf: ByteBuf): OutgoingPacket { 8 | buf.writeCharSequence(key, StandardCharsets.UTF_8) 9 | buf.writeByte(0) 10 | buf.writeCharSequence(value, StandardCharsets.UTF_8) 11 | buf.writeByte(0) 12 | return this 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/PostgresSQLPacket.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | 5 | interface PostgreSQLPacket { 6 | } 7 | interface OutgoingPacket: PostgreSQLPacket { 8 | fun write(buf: ByteBuf): OutgoingPacket 9 | } 10 | interface IncomingPacket: PostgreSQLPacket { 11 | fun parse(buf: ByteBuf): IncomingPacket 12 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/Query.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | import java.nio.charset.StandardCharsets 5 | 6 | class Query: IncomingPacket { 7 | var queryString: String? = null; 8 | override fun parse(buf: ByteBuf): IncomingPacket { 9 | // val query = buf.toString(StandardCharsets.UTF_8) 10 | // buf.readerIndex(query.length) 11 | val query = buf.readCharSequence(buf.writerIndex() - buf.readerIndex() - 1, StandardCharsets.UTF_8) 12 | // postgres string ends with a \0 13 | queryString = query.toString() 14 | return this 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/ReadyForQuery.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | 5 | class ReadyForQuery: OutgoingPacket { 6 | private val transactionStatus = 'I'.code; 7 | override fun write(buf: ByteBuf): OutgoingPacket { 8 | buf.writeByte(transactionStatus); 9 | return this 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/RowDescription.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | import java.nio.charset.StandardCharsets 5 | 6 | class RowDescription(val rowData: Array): OutgoingPacket { 7 | override fun write(buf: ByteBuf): OutgoingPacket { 8 | buf.writeShort(rowData.size) 9 | for (data in rowData) { 10 | data.write(buf) 11 | } 12 | return this 13 | } 14 | class RowData { 15 | var name: String? = null 16 | var objectId: Int = 0 17 | var attributeNumber: Short = 0 18 | var dataType: Int? = null 19 | var typeSize: Short? = 0 20 | var typeModifier: Int? = null 21 | var formatCode: Short? = null 22 | 23 | fun write(buf: ByteBuf): RowData { 24 | buf.writeCharSequence(name, StandardCharsets.UTF_8) 25 | buf.writeByte(0) 26 | buf.writeInt(objectId) 27 | buf.writeShort(attributeNumber.toInt()) 28 | buf.writeInt(dataType ?: 0) 29 | buf.writeShort((typeSize?: 0).toInt()) 30 | buf.writeInt(typeModifier?: 0) 31 | buf.writeShort((formatCode?: 0).toInt()) 32 | return this 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/SSLRequest.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | 5 | class SSLRequest : IncomingPacket { 6 | private var requestCode : Int? = null 7 | 8 | override fun parse(buf: ByteBuf): IncomingPacket { 9 | requestCode = buf.readInt() 10 | return this 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/StartupMessage.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import com.lss233.minidb.utils.BufUtil 4 | import io.netty.buffer.ByteBuf 5 | 6 | class StartupMessage : IncomingPacket { 7 | private var protocolVersion : Int? = null 8 | var parameters = HashMap() 9 | 10 | override fun parse(buf: ByteBuf): IncomingPacket { 11 | protocolVersion = buf.readInt() 12 | println("Begin reading startupMessage") 13 | 14 | var key = BufUtil.nextString(buf) 15 | while(key != null) { 16 | parameters[key] = BufUtil.nextString(buf)!! 17 | key = BufUtil.nextString(buf) 18 | } 19 | return this 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/packets/postgres/Terminate.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.packets.postgres 2 | 3 | import io.netty.buffer.ByteBuf 4 | 5 | class Terminate: IncomingPacket { 6 | override fun parse(buf: ByteBuf): IncomingPacket { 7 | return this 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/protocol/mysql/ConnectionPhrase.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.protocol.mysql 2 | 3 | enum class ConnectionPhrase { 4 | Handshake, 5 | Command 6 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/protocol/mysql/MySQLSession.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.protocol.mysql 2 | 3 | import com.lss233.minidb.networking.Session 4 | 5 | class MySQLSession: Session() { 6 | var clientFlags: Long = 0 7 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/networking/protocol/mysql/ServerStatusFlag.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.networking.protocol.mysql 2 | 3 | enum class ServerStatusFlag(private val value: Int) { 4 | SERVER_STATUS_IN_TRANS(1), 5 | SERVER_STATUS_AUTOCOMMIT(2), 6 | SERVER_MORE_RESULTS_EXISTS(8), 7 | SERVER_QUERY_NO_GOOD_INDEX_USED(16), 8 | SERVER_QUERY_NO_INDEX_USED(32), 9 | SERVER_STATUS_CURSOR_EXISTS(64), 10 | SERVER_STATUS_LAST_ROW_SENT(128), 11 | SERVER_STATUS_DB_DROPPED(256), 12 | SERVER_STATUS_NO_BACKSLASH_ESCAPES(512), 13 | SERVER_STATUS_METADATA_CHANGED(1024), 14 | SERVER_QUERY_WAS_SLOW(2048), 15 | SERVER_PS_OUT_PARAMS(4096), 16 | SERVER_STATUS_IN_TRANS_READONLY(8192), 17 | SERVER_SESSION_STATE_CHANGED(1 shl 14); 18 | companion object { 19 | /** 20 | * Checks whether the provided number has capability 21 | */ 22 | fun hasCapability(provided: Int, flag: ServerStatusFlag): Boolean = 23 | provided and flag.value > 0 24 | 25 | fun of(vararg capabilities: ServerStatusFlag): Int = 26 | capabilities.map { it.value }.reduce { acc, flags -> acc + flags } 27 | 28 | } 29 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/utils/BufUtil.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.utils 2 | 3 | import io.netty.buffer.ByteBuf 4 | import java.nio.charset.StandardCharsets 5 | 6 | class BufUtil { 7 | companion object { 8 | fun nextString(buf: ByteBuf): String? { 9 | var i = 1 10 | while(buf.writerIndex() >= buf.readerIndex() + i) { 11 | if(buf.getByte(buf.readerIndex() + i).toInt() == 0) { 12 | break 13 | } 14 | i++; 15 | } 16 | if(i > 1) { 17 | val startPos = buf.readerIndex() 18 | buf.readerIndex(startPos + i + 1) 19 | return buf.getCharSequence(startPos, i, StandardCharsets.UTF_8).toString() 20 | } 21 | return null 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/utils/ByteUtil.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.utils 2 | 3 | /** 4 | * byte操作的util 5 | */ 6 | class ByteUtil { 7 | 8 | companion object { 9 | @JvmStatic 10 | fun arraycopy(target: ByteArray, pos: Int, newBytes: ByteArray): ByteArray { 11 | System.arraycopy(newBytes, 0, target, pos, newBytes.size) 12 | return target 13 | } 14 | 15 | @JvmStatic 16 | fun intToByte4(sum: Int): ByteArray { 17 | val arr = ByteArray(4) 18 | arr[0] = (sum shr 24).toByte() 19 | arr[1] = (sum shr 16).toByte() 20 | arr[2] = (sum shr 8).toByte() 21 | arr[3] = (sum and 0xff).toByte() 22 | return arr 23 | } 24 | 25 | @JvmStatic 26 | fun byteToInt4(bytes: ByteArray): Int { 27 | return bytes[3].toInt() and 0xFF or ( 28 | bytes[2].toInt() and 0xFF shl 8) or ( 29 | bytes[1].toInt() and 0xFF shl 16) or ( 30 | bytes[0].toInt() and 0xFF shl 24) 31 | } 32 | 33 | @JvmStatic 34 | fun getTimeStampByte4(): ByteArray { 35 | val time = System.currentTimeMillis().toInt() 36 | return intToByte4(time) 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/utils/OrderPair.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.utils 2 | 3 | /** 4 | * @author icebigpig 5 | * @date 2022/10/14 11:09 6 | * @version 1.0 7 | */ 8 | 9 | class OrderPair(private var order: Int, value: V) { 10 | 11 | private var value: V? = value 12 | 13 | fun getOrder(): Int { 14 | return this.order 15 | } 16 | 17 | fun getValue(): V? { 18 | return this.value 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/kotlin/com/lss233/minidb/utils/TypeUtil.kt: -------------------------------------------------------------------------------- 1 | package com.lss233.minidb.utils 2 | 3 | /** 4 | * 类型相关的全局工具类 5 | */ 6 | class TypeUtil { 7 | 8 | companion object { 9 | @JvmStatic 10 | fun isVarLenType(type: String?): Boolean { 11 | var res = false 12 | when (type) { 13 | "char" -> res = true 14 | "varchar" -> res = true 15 | } 16 | return res 17 | } 18 | } 19 | 20 | } --------------------------------------------------------------------------------