Skip to content

Commit d21e68b

Browse files
authored
Merge pull request #75 from LiUGraphQL/fixing-filters
Filters occuring in subfields nolonger causes errors
2 parents c8dcce0 + e6490a7 commit d21e68b

File tree

2 files changed

+50
-48
lines changed

2 files changed

+50
-48
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
**v0.1.1, released on ???**
22
* New feature: Edge annotations can now be set when creating and/or updating objects. See: https://github.com/LiUGraphQL/woo.sh/issues/24
33
* Bug fix: Default values missing from field arguments is now fixed.
4+
* Bug fix: Filters occuring in subfields nolonger causes errors.
45

56
**v0.1.0, released on June 09, 2020**
67
* Initial version

graphql-server/drivers/arangodb/driver.js

Lines changed: 49 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ async function getEdge(parent, args, info){
297297
// add filters
298298
let query_filters = [];
299299
if(args.filter != undefined && !isEmptyObject(args.filter)){
300-
let filters = getFilters(args.filter, info);
300+
let filters = getFilters(args.filter, return_type);
301301
for(let i in filters){
302302
i == 0 ? query_filters.push(aql`FILTER`) : query_filters.push(aql`AND`);
303303
query_filters = query_filters.concat(filters[i]);
@@ -771,48 +771,49 @@ function formatFixVariable(_type, v) {
771771
if (Array.isArray(v)) {
772772
let newV = []
773773
for (date of v)
774-
newV.push(aql`DATE_TIMESTAMP("${date}")`);
774+
newV.push(aql`DATE_TIMESTAMP(${date})`);
775775
return newV;
776776
}
777777
else
778-
return aql`DATE_TIMESTAMP("${v}")`;
778+
return aql`DATE_TIMESTAMP(${v})`;
779779
else
780780
return v;
781781
}
782782

783783
/**
784784
* A small wrapper used by getFilters to call formatFixVariable.
785-
* @param field, info, value
785+
* @param field
786+
* @param type_to_filter
787+
* @param value
786788
* @returns value (in database ready format)
787789
*/
788-
function formatFixVariableWrapper(field, info, v) {
790+
function formatFixVariableWrapper(field, type_to_filter, v) {
789791
// no need to even try when we have _id as field
790792
if (field == '_id')
791793
return v;
792794

793-
let namedReturnType = graphql.getNamedType(info.returnType.getFields()['content'].type)
794-
let _type = graphql.getNamedType(namedReturnType.getFields()[field].type);
795+
let _type = graphql.getNamedType(type_to_filter.getFields()[field].type);
795796

796797
return formatFixVariable(_type, v);
797798
}
798799

799-
function getFilters(filter_arg, info){
800+
function getFilters(filter_arg, type_to_filter) {
800801
let filters = [];
801-
for(let i in filter_arg){
802+
for (let i in filter_arg) {
802803
let filter = filter_arg[i];
803804
/// Rewrite id field
804-
if(i == 'id'){ i = '_id'; }
805+
if (i == 'id') { i = '_id'; }
805806

806807
// AND expression
807-
if(i == '_and'){
808+
if (i == '_and') {
808809
let f = [];
809810
f.push(aql`(`);
810-
for(let x in filter) {
811-
if(x != 0){
811+
for (let x in filter) {
812+
if (x != 0) {
812813
f.push(aql`AND`);
813814
}
814-
let arr = getFilters(filter[x], info);
815-
for(let j in arr){
815+
let arr = getFilters(filter[x], type_to_filter);
816+
for (let j in arr) {
816817
f = f.concat(arr[j]);
817818
}
818819
}
@@ -821,15 +822,15 @@ function getFilters(filter_arg, info){
821822
}
822823

823824
// OR expression
824-
if(i == '_or'){
825+
if (i == '_or') {
825826
let f = [];
826827
f.push(aql`(`);
827-
for(let x in filter) {
828-
if(x != 0){
828+
for (let x in filter) {
829+
if (x != 0) {
829830
f.push(aql`OR`);
830831
}
831-
let arr = getFilters(filter[x], info);
832-
for(let j in arr){
832+
let arr = getFilters(filter[x], type_to_filter);
833+
for (let j in arr) {
833834
f = f.concat(arr[j]);
834835
}
835836
}
@@ -838,70 +839,70 @@ function getFilters(filter_arg, info){
838839
}
839840

840841
// NOT expression
841-
if(i == '_not'){
842+
if (i == '_not') {
842843
let f = [];
843844
f.push(aql`NOT (`);
844-
let arr = getFilters(filter, info);
845-
for(let j in arr){
845+
let arr = getFilters(filter, type_to_filter);
846+
for (let j in arr) {
846847
f = f.concat(arr[j]);
847848
}
848849
f.push(aql`)`);
849850
filters.push(f);
850851
}
851852

852-
if(filter._eq != null){
853-
let preparedArg = formatFixVariableWrapper(i, info, filter._eq);
853+
if (filter._eq != null) {
854+
let preparedArg = formatFixVariableWrapper(i, type_to_filter, filter._eq);
854855
filters.push([aql`x.${i} == ${preparedArg}`]);
855856
}
856-
if(filter._neq != null){
857-
let preparedArgs = formatFixVariableWrapper(i, info, filter._neq);
857+
if (filter._neq != null) {
858+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._neq);
858859
filters.push([aql`x.${i} != ${preparedArgs}`]);
859860
}
860-
if(filter._gt != null){
861-
let preparedArgs = formatFixVariableWrapper(i, info, filter._gt);
861+
if (filter._gt != null) {
862+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._gt);
862863
filters.push([aql`x.${i} > ${preparedArgs}`]);
863864
}
864-
if(filter._egt != null){
865-
let preparedArgs = formatFixVariableWrapper(i, info, filter._egt);
865+
if (filter._egt != null) {
866+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._egt);
866867
filters.push([aql`x.${i} >= ${preparedArgs}`]);
867868
}
868-
if(filter._lt != null){
869-
let preparedArgs = formatFixVariableWrapper(i, info, filter._lt);
869+
if (filter._lt != null) {
870+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._lt);
870871
filters.push([aql`x.${i} < ${preparedArgs}`]);
871872
}
872-
if(filter._elt != null){
873-
let preparedArgs = formatFixVariableWrapper(i, info, filter._elt);
873+
if (filter._elt != null) {
874+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._elt);
874875
filters.push([aql`x.${i} <= ${preparedArgs}`]);
875876
}
876-
if(filter._in != null){
877-
let preparedArgs = formatFixVariableWrapper(i, info, filter._in)
877+
if (filter._in != null) {
878+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._in)
878879
let q = [];
879880
q = q.concat([aql`x.${i} IN `]);
880881
q = q.concat(asAqlArray(preparedArgs));
881882
filters.push(q);
882883
}
883-
if(filter._nin != null){
884-
let preparedArgs = formatFixVariableWrapper(i, info, filter._nin);
884+
if (filter._nin != null) {
885+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._nin);
885886
let q = [];
886887
q = q.concat([aql`x.${i} NOT IN `]);
887888
q = q.concat(asAqlArray(preparedArgs));
888889
filters.push(q);
889890
}
890891

891-
if(filter._like != null){
892-
let preparedArgs = formatFixVariableWrapper(i, info, filter._like);
892+
if (filter._like != null) {
893+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._like);
893894
filters.push([aql`LIKE(x.${i}, ${preparedArgs}, false)`]);
894895
}
895-
if(filter._ilike != null){
896-
let preparedArgs = formatFixVariableWrapper(i, info, filter._ilike);
896+
if (filter._ilike != null) {
897+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._ilike);
897898
filters.push([aql`LIKE(x.${i}, ${preparedArgs}, true)`]);
898899
}
899-
if(filter._nlike != null){
900-
let preparedArgs = formatFixVariableWrapper(i, info, filter._nlike);
900+
if (filter._nlike != null) {
901+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._nlike);
901902
filters.push([aql`NOT LIKE(x.${i}, ${preparedArgs}, false)`]);
902903
}
903-
if(filter._nilike != null){
904-
let preparedArgs = formatFixVariableWrapper(i, info, filter._nilike);
904+
if (filter._nilike != null) {
905+
let preparedArgs = formatFixVariableWrapper(i, type_to_filter, filter._nilike);
905906
filters.push([aql`NOT LIKE(x.${i}, ${preparedArgs}, true)`]);
906907
}
907908

@@ -942,7 +943,7 @@ async function getList(args, info){
942943
// add filters
943944
let query_filters = [];
944945
if(args.filter != undefined && !isEmptyObject(args.filter)){
945-
let filters = getFilters(args.filter, info);
946+
let filters = getFilters(args.filter, type);
946947
if(filters.length > 0) {
947948
query_filters.push(aql`FILTER`);
948949
for (let i in filters) {

0 commit comments

Comments
 (0)