Skip to content

Commit 49091ff

Browse files
[MIN] XQuery, fn:min, fn:max. qtspecs#2216
1 parent 7f1d520 commit 49091ff

File tree

5 files changed

+19
-21
lines changed

5 files changed

+19
-21
lines changed

basex-core/src/main/java/org/basex/query/func/fn/FnMin.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,11 @@ final Item minmax(final boolean min, final QueryContext qc) throws QueryExceptio
5252
Item item = iter.next();
5353
if(item == null) return Empty.VALUE;
5454

55-
// ensure that item is sortable
5655
final Type type = item.type;
57-
if(!type.isSortable()) throw COMPARE_X_X.get(info, type, item);
58-
5956
final boolean string = item instanceof AStr;
60-
final boolean numeric = !string && !(
61-
type == BOOLEAN || item instanceof ADate || item instanceof Dur || item instanceof Bin);
62-
final boolean dateTime = type.instanceOf(DATE_TIME);
57+
final boolean dateTime = item instanceof Dtm, duration = item instanceof Dur;
58+
final boolean numeric = !(string || dateTime || duration || type == BOOLEAN || type == QNAME ||
59+
item instanceof ADate || item instanceof Dur || item instanceof Bin);
6360
if(numeric) {
6461
if(type.isUntyped()) item = DOUBLE.cast(item, qc, info);
6562
if(item == Dbl.NAN || item == Flt.NAN) return item;
@@ -70,8 +67,8 @@ final Item minmax(final boolean min, final QueryContext qc) throws QueryExceptio
7067
if(type2.isUntyped()) it = DOUBLE.cast(it, qc, info);
7168
if(it == Dbl.NAN || it == Flt.NAN) return it;
7269
}
73-
if(!(numeric ? it instanceof ANum : string ? it instanceof AStr : dateTime ?
74-
type2.instanceOf(DATE_TIME) : type == type2)) {
70+
if(!(numeric ? it instanceof ANum : string ? it instanceof AStr :
71+
dateTime ? it instanceof Dtm : duration ? it instanceof Dur : type == type2)) {
7572
throw ARGTYPE_X_X_X.get(info, type, type2, it);
7673
}
7774
if(min ^ item.compare(it, collation, true, info) < 0) item = it;

basex-core/src/main/java/org/basex/query/value/item/ADate.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -405,11 +405,6 @@ public final int hashCode() {
405405
return toSeconds().intValue();
406406
}
407407

408-
@Override
409-
public boolean comparable(final Item item) {
410-
return item instanceof ADate;
411-
}
412-
413408
@Override
414409
public final int compare(final Item item, final Collation coll, final boolean transitive,
415410
final InputInfo ii) throws QueryException {

basex-core/src/main/java/org/basex/query/value/item/Dtm.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,9 @@ public static Dtm get(final long ms) {
112112
throw Util.notExpected(ex);
113113
}
114114
}
115+
116+
@Override
117+
public boolean comparable(final Item item) {
118+
return item instanceof Dtm;
119+
}
115120
}

basex-core/src/main/java/org/basex/query/value/type/AtomType.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ public Itr read(final DataInput in, final QueryContext qc) throws IOException {
570570
},
571571

572572
/** Duration type. */
573-
DURATION("duration", ANY_ATOMIC_TYPE, XS_URI, false, false, false, false, Type.ID.DUR) {
573+
DURATION("duration", ANY_ATOMIC_TYPE, XS_URI, false, false, false, true, Type.ID.DUR) {
574574
@Override
575575
public Dur cast(final Item item, final QueryContext qc, final InputInfo info)
576576
throws QueryException {
@@ -713,7 +713,7 @@ public Tim read(final DataInput in, final QueryContext qc) throws IOException, Q
713713
},
714714

715715
/** Year month type. */
716-
G_YEAR_MONTH("gYearMonth", ANY_ATOMIC_TYPE, XS_URI, false, false, false, false, Type.ID.YMO) {
716+
G_YEAR_MONTH("gYearMonth", ANY_ATOMIC_TYPE, XS_URI, false, false, false, true, Type.ID.YMO) {
717717
@Override
718718
public GDt cast(final Item item, final QueryContext qc, final InputInfo info)
719719
throws QueryException {
@@ -733,7 +733,7 @@ public GDt read(final DataInput in, final QueryContext qc) throws IOException, Q
733733
},
734734

735735
/** Year type. */
736-
G_YEAR("gYear", ANY_ATOMIC_TYPE, XS_URI, false, false, false, false, Type.ID.YEA) {
736+
G_YEAR("gYear", ANY_ATOMIC_TYPE, XS_URI, false, false, false, true, Type.ID.YEA) {
737737
@Override
738738
public GDt cast(final Item item, final QueryContext qc, final InputInfo info)
739739
throws QueryException {
@@ -753,7 +753,7 @@ public GDt read(final DataInput in, final QueryContext qc) throws IOException, Q
753753
},
754754

755755
/** Month day type. */
756-
G_MONTH_DAY("gMonthDay", ANY_ATOMIC_TYPE, XS_URI, false, false, false, false, Type.ID.MDA) {
756+
G_MONTH_DAY("gMonthDay", ANY_ATOMIC_TYPE, XS_URI, false, false, false, true, Type.ID.MDA) {
757757
@Override
758758
public GDt cast(final Item item, final QueryContext qc, final InputInfo info)
759759
throws QueryException {
@@ -773,7 +773,7 @@ public GDt read(final DataInput in, final QueryContext qc) throws IOException, Q
773773
},
774774

775775
/** Day type. */
776-
G_DAY("gDay", ANY_ATOMIC_TYPE, XS_URI, false, false, false, false, Type.ID.DAY) {
776+
G_DAY("gDay", ANY_ATOMIC_TYPE, XS_URI, false, false, false, true, Type.ID.DAY) {
777777
@Override
778778
public GDt cast(final Item item, final QueryContext qc, final InputInfo info)
779779
throws QueryException {
@@ -793,7 +793,7 @@ public GDt read(final DataInput in, final QueryContext qc) throws IOException, Q
793793
},
794794

795795
/** Month type. */
796-
G_MONTH("gMonth", ANY_ATOMIC_TYPE, XS_URI, false, false, false, false, Type.ID.MON) {
796+
G_MONTH("gMonth", ANY_ATOMIC_TYPE, XS_URI, false, false, false, true, Type.ID.MON) {
797797
@Override
798798
public GDt cast(final Item item, final QueryContext qc, final InputInfo info)
799799
throws QueryException {
@@ -897,7 +897,7 @@ public Uri read(final DataInput in, final QueryContext qc) throws IOException {
897897
},
898898

899899
/** QName Type. */
900-
QNAME("QName", ANY_ATOMIC_TYPE, XS_URI, false, false, false, false, Type.ID.QNM) {
900+
QNAME("QName", ANY_ATOMIC_TYPE, XS_URI, false, false, false, true, Type.ID.QNM) {
901901
@Override
902902
public QNm cast(final Item item, final QueryContext qc, final InputInfo info)
903903
throws QueryException {

basex-core/src/test/java/org/basex/query/func/FnModuleTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2075,8 +2075,9 @@ public final class FnModuleTest extends SandboxTest {
20752075
check(func.args(wrap(1)), 1, exists(func));
20762076
check(func.args(" (0 to 99999999999) ! (1 to 10000000)"), 1, root(Itr.class));
20772077

2078+
query(func.args(" #a"), "#a");
2079+
20782080
// errors
2079-
error(func.args(" #a"), COMPARE_X_X);
20802081
error(func.args(" ('b', 'c', 'a', 1)"), ARGTYPE_X_X_X);
20812082
error(func.args(" (2, 3, 1, 'a')"), ARGTYPE_X_X_X);
20822083
error(func.args(" (false(), true(), false(), 1)"), ARGTYPE_X_X_X);

0 commit comments

Comments
 (0)