Skip to content

Commit ef359e4

Browse files
nhawkesfacebook-github-bot
authored andcommitted
Fix slow query
Summary: Context: S497877 Some describe requests for c++ only are really slow because of an optimisation bug Reviewed By: pepeiborra Differential Revision: D70871800 fbshipit-source-id: 3e6fec6201ff2699c50030b56a4e22fe7ef3ee75
1 parent 2c9edb5 commit ef359e4

File tree

1 file changed

+55
-31
lines changed
  • glean/glass/Glean/Glass/Search

1 file changed

+55
-31
lines changed

glean/glass/Glean/Glass/Search/Cxx.hs

+55-31
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,15 @@ lookupEnumerator
181181
lookupEnumerator anchor ns (P.Name parent) (P.Name name) =
182182
vars $ \ (decl :: Angle Cxx.Enumerator) (entity :: Angle Cxx.Entity)
183183
(codeEntity :: Angle Code.Entity) (file :: Angle Src.File)
184-
(rangespan :: Angle Code.RangeSpan) (lname :: Angle Text) ->
185-
tuple (entity, file, rangespan, lname) `where_` ((
184+
(rangespan :: Angle Code.RangeSpan) (lname :: Angle Text)
185+
(scope :: Angle Cxx.Scope) ->
186+
tuple (entity, file, rangespan, lname) `where_` (
187+
(scope .= sig (scopeQ (reverse scopes))):(
186188
wild .= predicate @SymbolId.LookupEnumerator (
187189
rec $
188190
field @"name" (string name) $
189191
field @"parent" (string parent) $
190-
field @"scope" (scopeQ (reverse scopes)) $
192+
field @"scope" scope $
191193
field @"decl" (asPredicate decl)
192194
end))
193195
: (alt @"enumerator" (asPredicate decl) .= sig entity)
@@ -199,12 +201,14 @@ lookupDTorDeclaration :: Text -> [P.Name] -> Angle (ResultLocation Cxx.Entity)
199201
lookupDTorDeclaration anchor ns =
200202
vars $ \(decl :: Angle Cxx.Declaration) (entity :: Angle Cxx.Entity)
201203
(codeEntity :: Angle Code.Entity) (file :: Angle Src.File)
202-
(rangespan :: Angle Code.RangeSpan) (lname :: Angle Text) ->
203-
tuple (entity, file, rangespan, lname) `where_` ((
204+
(rangespan :: Angle Code.RangeSpan) (lname :: Angle Text)
205+
(scope :: Angle Cxx.Scope) ->
206+
tuple (entity, file, rangespan, lname) `where_` (
207+
(scope .= sig (scopeQ (reverse scopes))):(
204208
wild .= predicate @SymbolId.LookupFunctionDeclaration (
205209
rec $
206210
field @"name" (alt @"destructor" wild) $
207-
field @"scope" (scopeQ (reverse scopes)) $
211+
field @"scope" scope $
208212
field @"decl" decl
209213
end))
210214
: entityDeclFooter anchor decl entity codeEntity file rangespan lname
@@ -215,12 +219,13 @@ lookupDTorDefinition :: Text -> [P.Name] -> Angle (ResultLocation Cxx.Entity)
215219
lookupDTorDefinition anchor ns =
216220
vars $ \(entity :: Angle Cxx.Entity) (codeEntity :: Angle Code.Entity)
217221
(file :: Angle Src.File) (rangespan :: Angle Code.RangeSpan)
218-
(lname :: Angle Text) ->
219-
tuple (entity, file, rangespan, lname) `where_` ((
222+
(lname :: Angle Text) (scope :: Angle Cxx.Scope) ->
223+
tuple (entity, file, rangespan, lname) `where_` (
224+
(scope .= sig (scopeQ (reverse scopes))):(
220225
wild .= predicate @SymbolId.LookupFunctionDefinition (
221226
rec $
222227
field @"name" (alt @"destructor" wild) $
223-
field @"scope" (scopeQ (reverse scopes)) $
228+
field @"scope" scope $
224229
field @"entity" entity
225230
end))
226231
: entityFooter anchor entity codeEntity file rangespan lname
@@ -232,12 +237,14 @@ lookupCTorSignatureDefinition
232237
lookupCTorSignatureDefinition anchor ns ps =
233238
vars $ \(entity :: Angle Cxx.Entity) (codeEntity :: Angle Code.Entity)
234239
(file :: Angle Src.File) (rangespan :: Angle Code.RangeSpan)
235-
(lname :: Angle Text) ->
240+
(lname :: Angle Text)
241+
(scope :: Angle Cxx.Scope) ->
236242
tuple (entity, file, rangespan, lname) `where_` ([
243+
scope .= sig (scopeQ (reverse scopes)),
237244
wild .= predicate @SymbolId.LookupFunctionSignatureDefinition (
238245
rec $
239246
field @"name" (alt @"constructor" wild) $ -- either @alt ctor or dtor
240-
field @"scope" (scopeQ (reverse scopes)) $
247+
field @"scope" scope $
241248
field @"signature" (asPredicate (paramTypesQ params)) $
242249
field @"entity" entity
243250
end)
@@ -252,12 +259,14 @@ lookupCTorSignatureDeclaration anchor ns ps =
252259
vars $ \(decl :: Angle Cxx.Declaration) (entity :: Angle Cxx.Entity)
253260
(codeEntity :: Angle Code.Entity) (file :: Angle Src.File)
254261
(rangespan :: Angle Code.RangeSpan)
255-
(lname :: Angle Text) ->
262+
(lname :: Angle Text)
263+
(scope :: Angle Cxx.Scope) ->
256264
tuple (entity, file, rangespan, lname) `where_` ([
265+
scope .= sig (scopeQ (reverse scopes)),
257266
wild .= predicate @SymbolId.LookupFunctionSignatureDeclaration (
258267
rec $
259268
field @"name" (alt @"constructor" wild) $ -- either @alt ctor or dtor
260-
field @"scope" (scopeQ (reverse scopes)) $
269+
field @"scope" scope $
261270
field @"signature" (asPredicate (paramTypesQ params)) $
262271
field @"decl" decl
263272
end)
@@ -274,14 +283,16 @@ lookupFunctionSignatureDeclaration anchor ns (P.Name name) ps quals =
274283
(codeEntity :: Angle Code.Entity) (file :: Angle Src.File)
275284
(rangespan :: Angle Code.RangeSpan)
276285
(fname :: Angle Cxx.FunctionName) (n :: Angle Cxx.Name)
277-
(lname :: Angle Text) ->
286+
(lname :: Angle Text)
287+
(scope :: Angle Cxx.Scope) ->
278288
tuple (entity, file, rangespan, lname) `where_` ([
279289
n .= predicate @Cxx.Name (string name),
280290
fname .= predicate @Cxx.FunctionName (alt @"name" (asPredicate n)),
291+
scope .= sig (scopeQ (reverse scopes)),
281292
wild .= predicate @SymbolId.LookupFunctionSignatureQualifierDeclaration (
282293
rec $
283294
field @"name" (asPredicate fname) $
284-
field @"scope" (scopeQ (reverse scopes)) $
295+
field @"scope" scope $
285296
field @"signature" (asPredicate (paramTypesQ params)) $
286297
field @"qualifiers" (qualifiersQ quals) $
287298
field @"decl" decl
@@ -298,14 +309,16 @@ lookupFunctionSignatureDefinition anchor ns (P.Name name) ps quals =
298309
vars $ \(entity :: Angle Cxx.Entity) (codeEntity :: Angle Code.Entity)
299310
(file :: Angle Src.File) (rangespan :: Angle Code.RangeSpan)
300311
(fname :: Angle Cxx.FunctionName) (n :: Angle Cxx.Name)
301-
(lname :: Angle Text) ->
312+
(lname :: Angle Text)
313+
(scope :: Angle Cxx.Scope) ->
302314
tuple (entity, file, rangespan, lname) `where_` ([
303315
n .= predicate @Cxx.Name (string name),
304316
fname .= predicate @Cxx.FunctionName (alt @"name" (asPredicate n)),
317+
scope .= sig (scopeQ (reverse scopes)),
305318
wild .= predicate @SymbolId.LookupFunctionSignatureQualifierDefinition (
306319
rec $
307320
field @"name" (asPredicate fname) $
308-
field @"scope" (scopeQ (reverse scopes)) $
321+
field @"scope" scope $
309322
field @"signature" (asPredicate (paramTypesQ params)) $
310323
field @"qualifiers" (qualifiersQ quals) $
311324
field @"entity" entity
@@ -325,13 +338,15 @@ lookupOperatorSignatureDeclaration anchor ns (P.Name o) ps quals =
325338
vars $ \(decl :: Angle Cxx.Declaration) (entity :: Angle Cxx.Entity)
326339
(codeEntity :: Angle Code.Entity) (file :: Angle Src.File)
327340
(rangespan :: Angle Code.RangeSpan)
328-
(fname :: Angle Cxx.FunctionName) (lname :: Angle Text) ->
341+
(fname :: Angle Cxx.FunctionName) (lname :: Angle Text)
342+
(scope :: Angle Cxx.Scope) ->
329343
tuple (entity, file, rangespan, lname) `where_` ([
330344
fname .= predicate @Cxx.FunctionName (operatorQ o),
345+
scope .= sig (scopeQ (reverse scopes)),
331346
wild .= predicate @SymbolId.LookupFunctionSignatureQualifierDeclaration (
332347
rec $
333348
field @"name" (asPredicate fname) $
334-
field @"scope" (scopeQ (reverse scopes)) $
349+
field @"scope" scope $
335350
field @"signature" (asPredicate (paramTypesQ params)) $
336351
field @"qualifiers" (qualifiersQ quals) $
337352
field @"decl" decl
@@ -347,13 +362,15 @@ lookupOperatorSignatureDefinition
347362
lookupOperatorSignatureDefinition anchor ns (P.Name o) ps quals =
348363
vars $ \(entity :: Angle Cxx.Entity) (codeEntity :: Angle Code.Entity)
349364
(file :: Angle Src.File) (rangespan :: Angle Code.RangeSpan)
350-
(fname :: Angle Cxx.FunctionName) (lname :: Angle Text) ->
365+
(fname :: Angle Cxx.FunctionName) (lname :: Angle Text)
366+
(scope :: Angle Cxx.Scope) ->
351367
tuple (entity, file, rangespan, lname) `where_` ([
352368
fname .= predicate @Cxx.FunctionName (operatorQ o),
369+
scope .= sig (scopeQ (reverse scopes)),
353370
wild .= predicate @SymbolId.LookupFunctionSignatureQualifierDefinition (
354371
rec $
355372
field @"name" (asPredicate fname) $
356-
field @"scope" (scopeQ (reverse scopes)) $
373+
field @"scope" scope $
357374
field @"signature" (asPredicate (paramTypesQ params)) $
358375
field @"qualifiers" (qualifiersQ quals) $
359376
field @"entity" entity
@@ -373,15 +390,17 @@ lookupTypeOperatorSignatureDeclaration anchor ns (P.Name retTy) quals =
373390
vars $ \(decl :: Angle Cxx.Declaration) (entity :: Angle Cxx.Entity)
374391
(codeEntity :: Angle Code.Entity) (file :: Angle Src.File)
375392
(rangespan :: Angle Code.RangeSpan) (tyFact :: Angle Cxx.Type)
376-
(fname :: Angle Cxx.FunctionName) (lname :: Angle Text) ->
393+
(fname :: Angle Cxx.FunctionName) (lname :: Angle Text)
394+
(scope :: Angle Cxx.Scope) ->
377395
tuple (entity, file, rangespan, lname) `where_` ([
378396
tyFact .= predicate @Cxx.Type (string retTy),
379397
fname .= predicate @Cxx.FunctionName
380398
(alt @"conversionOperator" (asPredicate tyFact)),
399+
scope .= sig (scopeQ (reverse scopes)),
381400
wild .= predicate @SymbolId.LookupFunctionSignatureQualifierDeclaration (
382401
rec $
383402
field @"name" (asPredicate fname) $
384-
field @"scope" (scopeQ (reverse scopes)) $
403+
field @"scope" scope $
385404
field @"signature" (asPredicate (returnTypeQ tyFact)) $
386405
field @"qualifiers" (qualifiersQ quals) $
387406
field @"decl" decl
@@ -397,15 +416,16 @@ lookupTypeOperatorSignatureDefinition anchor ns (P.Name retTy) quals =
397416
vars $ \(entity :: Angle Cxx.Entity) (codeEntity :: Angle Code.Entity)
398417
(file :: Angle Src.File) (rangespan :: Angle Code.RangeSpan)
399418
(tyFact :: Angle Cxx.Type) (fname :: Angle Cxx.FunctionName)
400-
(lname :: Angle Text) ->
419+
(lname :: Angle Text) (scope :: Angle Cxx.Scope) ->
401420
tuple (entity, file, rangespan, lname) `where_` ([
402421
tyFact .= predicate @Cxx.Type (string retTy),
403422
fname .= predicate @Cxx.FunctionName
404423
(alt @"conversionOperator" (asPredicate tyFact)),
424+
scope .= sig (scopeQ (reverse scopes)),
405425
wild .= predicate @SymbolId.LookupFunctionSignatureQualifierDefinition (
406426
rec $
407427
field @"name" (asPredicate fname) $
408-
field @"scope" (scopeQ (reverse scopes)) $
428+
field @"scope" scope $
409429
field @"signature" (asPredicate (returnTypeQ tyFact)) $
410430
field @"qualifiers" (qualifiersQ quals) $
411431
field @"entity" entity
@@ -435,12 +455,14 @@ lookupDeclaration
435455
lookupDeclaration anchor ns (P.Name name) =
436456
vars $ \ (decl :: Angle Cxx.Declaration) (entity :: Angle Cxx.Entity)
437457
(codeEntity :: Angle Code.Entity) (file :: Angle Src.File)
438-
(rangespan :: Angle Code.RangeSpan) (lname :: Angle Text) ->
439-
tuple (entity, file, rangespan, lname) `where_` ((
458+
(rangespan :: Angle Code.RangeSpan) (lname :: Angle Text)
459+
(scope :: Angle Cxx.Scope) ->
460+
tuple (entity, file, rangespan, lname) `where_` (
461+
(scope .= sig (scopeQ (reverse scopes))):(
440462
wild .= predicate @SymbolId.LookupDeclaration (
441463
rec $
442464
field @"name" (string name) $
443-
field @"scope" (scopeQ (reverse scopes)) $
465+
field @"scope" scope $
444466
field @"decl" decl
445467
end))
446468
: entityDeclFooter anchor decl entity codeEntity file rangespan lname
@@ -460,13 +482,15 @@ lookupFunctionDeclaration
460482
lookupFunctionDeclaration anchor ns (P.Name name) =
461483
vars $ \ (decl :: Angle Cxx.Declaration) (entity :: Angle Cxx.Entity)
462484
(codeEntity :: Angle Code.Entity) (file :: Angle Src.File)
463-
(rangespan :: Angle Code.RangeSpan) (lname :: Angle Text) ->
464-
tuple (entity, file, rangespan, lname) `where_` ((
485+
(rangespan :: Angle Code.RangeSpan) (lname :: Angle Text)
486+
(scope :: Angle Cxx.Scope) ->
487+
tuple (entity, file, rangespan, lname) `where_` (
488+
(scope .= sig (scopeQ (reverse scopes))):(
465489
wild .= predicate @SymbolId.LookupFunctionDeclaration (
466490
rec $
467491
field @"name" (functionName name) $
468492
-- scopeQuery: too generic? can this ever be local or a function?
469-
field @"scope" (scopeQ (reverse scopes)) $
493+
field @"scope" scope $
470494
field @"decl" decl
471495
end))
472496
: entityDeclFooter anchor decl entity codeEntity file rangespan lname

0 commit comments

Comments
 (0)