IP Library Granted Patent US 10,817,575
Granted Patent B2
US 10,817,575 · App. 15/910,309 · Granted Oct 27, 2020

Performing an object relational model query against a database that includes fields defined at runtime

Inventor: Timothy R. Norman (Overland Park, KS)
Assignee: LockPath, Inc.
G06F16/951G06F16/2423
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,817,575
App. No.
15/910,309
Granted
Oct 27, 2020
Kind
B2
Abstract

A facility for querying user-defined database columns is described. The facility receives a database query referring to one or more database columns, at least one of the referred-to database columns being a user-defined database column. The facility provides access to a database query result generated for the perceived database query via a programmatic object.

Claims (57)

1. A computer-readable device having contents that cause a computing system to perform operations for querying dynamic data in a database, the database having a data model, the operations comprising:

obtaining a first hierarchy, wherein the first hierarchy is based on a received database query that refers to the dynamic data, wherein the dynamic data comprises one or more user-defined database columns or one or more dynamic table names, wherein the dynamic data is not defined in the data model of the database, and wherein the first hierarchy is based, in part, on one or both of the one or more user-defined database columns or the one or more dynamic table names; and

transforming the first hierarchy into a second hierarchy, the transforming based on the dynamic data and one or more identifiers defined in the data model of the database;

wherein the second hierarchy is used to provide a response to the received database query.

2. The computer-readable device of claim 1 , wherein transforming the first hierarchy into a second hierarchy comprises:

invoking a conversion process, in relation to a root node of the first hierarchy, that traverses the first hierarchy,

wherein conversion process's traversal of the first hierarchy performs multiple iterations or recursions, each with respect to a fragment of the first hierarchy and each converting the fragment of the first hierarchy into a fragment of the second hierarchy.

3. The computer-readable device of claim 2 , wherein the conversion process further comprises, for a particular iteration or recursion operating on a particular fragment of the first hierarchy:

obtaining a LINQ-compatible method from the particular fragment of the first hierarchy by:

determining that the particular fragment of the first hierarchy refers to a LINQ method; or

converting a portion of the particular fragment of the first hierarchy into a LINQ-compatible expression tree; and

wrapping a new method call expression around parameters of the LINQ-compatible method that are translated in another iteration or recursion of the conversion process.

4. The computer-readable device of claim 2 , wherein the conversion process further comprises, for a particular iteration or recursion operating on a particular fragment of the first hierarchy that references the dynamic data, converting a field path associated with the dynamic data referenced by the particular fragment of the first hierarchy into a nested property expression.

5. The computer-readable device of claim 2 , wherein the operations further comprise maintaining a contextual type stack during the transformation as a basis for disambiguating, in the transformation, names for database columns.

6. The computer-readable device of claim 5 ,

wherein the conversion process is a recursive function; and

wherein the same contextual type stack is available to each recursive call of the conversion process.

7. The computer-readable device of claim 5 , wherein the conversion process further comprises, for a particular iteration or recursion operating on a particular fragment of the first hierarchy:

determining that the particular fragment of the first hierarchy refers to a lambda expression;

creating a typed lambda expression based upon one or more types that are at the top of the contextual type stack;

iteratively or recursively using the conversion process to translate a body expression of the lambda expression; and

wrapping a new lambda expression around the translated body expression.

8. The computer-readable device of claim 5 , wherein the conversion process further comprises, for a particular iteration or recursion operating on a particular fragment of the first hierarchy that references the dynamic data:

converting a portion of the dynamic data referenced by the particular fragment of the first hierarchy into a LINQ table value with a particular type; and

adding the particular type of the LINQ table value to the contextual type stack.

9. The computer-readable device of claim 1 , wherein the first hierarchy is an expression tree hierarchy.

10. The computer-readable device of claim 1 , wherein the transforming comprises applying an object relational model engine to the first hierarchy.

11. The computer-readable device of claim 1 , wherein providing the response to the received database query includes using the second hierarchy to generate, via a programmatic object, database instructions that are executed against the database.

12. The computer-readable device of claim 1 , wherein the operations further comprise:

parsing the received database query that refers to the at least one user-defined database column into portions; and

generating the first hierarchy using the portions.

13. A computing system for querying dynamic data in a database, the database having a data model, the system comprising:

one or more processors; and

a memory storing instructions that, when executed by the one or more processors, cause the computing system to perform operations comprising:

obtaining a first hierarchy, wherein the first hierarchy is based on a received database query that refers to the dynamic data, wherein the dynamic data comprises one or more user-defined database columns or one or more dynamic table names, wherein the dynamic data is not defined in the data model of the database, and wherein the first hierarchy is based, in part, on one or both of the one or more user-defined database columns or the one or more dynamic table names; and

transforming the first hierarchy into a second hierarchy, the transforming based on the dynamic data and one or more identifiers defined in the data model of the database;

wherein the second hierarchy is used to provide a response to the received database query.

14. The system of claim 13 , wherein transforming the first hierarchy into a second hierarchy comprises:

invoking a conversion process, in relation to a root node of the first hierarchy, that traverses the first hierarchy; and

maintaining a contextual type stack during the transformation as a basis for disambiguating, in the transformation, names for database columns;

wherein conversion process's traversal of the first hierarchy performs multiple iterations or recursions, each with respect to a fragment of the first hierarchy and each converting the fragment of the first hierarchy into a fragment of the second hierarchy.

15. The system of claim 14 , wherein the conversion process further comprises, for a particular iteration or recursion operating on a particular fragment of the first hierarchy:

determining that the particular fragment of the first hierarchy refers to a LINQ method; and

wrapping a new method call expression around parameters to the LINQ method that are translated in another iteration or recursion of the conversion process.

16. The system of claim 14 , wherein the conversion process further comprises, for a particular iteration or recursion operating on a particular fragment of the first hierarchy that references the dynamic data, converting a field path associated with the dynamic data referenced by the particular fragment of the first hierarchy into a nested property expression.

17. The system of claim 13 , wherein the operations further comprise:

parsing the input that refers to the at least one user-defined database column into portions; and

generating the first hierarchy using the portions.

18. A method for querying dynamic data in a database, the database having a data model, the method comprising:

obtaining a first hierarchy, wherein the first hierarchy is based on a received database query that refers to the dynamic data, wherein the dynamic data comprises one or more user-defined database columns or one or more dynamic table names, wherein the dynamic data is not defined in the data model of the database, and wherein the first hierarchy is based, in part, on one or both of the one or more user-defined database columns or the one or more dynamic table names; and

transforming the first hierarchy into a second hierarchy, the transforming based on the dynamic data and one or more identifiers defined in the data model of the database;

wherein the second hierarchy is used to provide a response to the received database query.

19. The method of claim 18 , wherein transforming the first hierarchy into a second hierarchy comprises:

invoking a conversion process, in relation to a root node of the first hierarchy, that traverses the first hierarchy; and

maintaining a contextual type stack during the transformation as a basis for disambiguating, in the transformation, names for database columns;

wherein conversion process's traversal of the first hierarchy performs multiple iterations or recursions, each with respect to a fragment of the first hierarchy and each converting the fragment of the first hierarchy into a fragment of the second hierarchy.

20. The method of claim 19 , wherein the conversion process further comprises, for a particular iteration or recursion operating on a particular fragment of the first hierarchy that references the dynamic data, converting a field path associated with the dynamic data referenced by the particular fragment of the first hierarchy into a nested property expression.

Assignments (11)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 9, 2026
From: LOCKPATH, INC.
To: NAVEX GLOBAL, INC.
Reel/Frame 073421/0392 →
MERGER Recorded Jan 9, 2026
From: HORNET SUB, INC.
To: LOCKPATH, INC.
Reel/Frame 073421/0398 →
SECURITY INTEREST Recorded Oct 15, 2025
From: NAVEX GLOBAL, INC.
To: ANTARES CAPITAL LP, AS COLLATERAL AGENT
Reel/Frame 072574/0356 →
RELEASE OF SECURITY INTEREST RECORDED AT REEL/FRAME 065519/0345 Recorded Oct 15, 2025
From: ANTARES CAPITAL LP, AS COLLATERAL AGENT
To: NAVEX GLOBAL, INC.
Reel/Frame 073069/0677 →
RELEASE OF SECURITY INTEREST IN PATENTS AT REEL 050911, FRAME 0873 Recorded Nov 17, 2023
From: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
To: LOCKPATH, INC.
Reel/Frame 065612/0945 →
RELEASE OF SECURITY INTEREST IN PATENTS AT REEL 050911, FRAME 0969 Recorded Nov 17, 2023
From: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
To: LOCKPATH, INC.
Reel/Frame 065613/0004 →
SECURITY INTEREST Recorded Nov 10, 2023
From: NAVEX GLOBAL, INC.
To: ANTARES CAPITAL LP, AS COLLATERAL AGENT
Reel/Frame 065519/0345 →
MERGER Recorded Feb 22, 2022
From: LOCKPATH, INC.
To: HORNET SUB, INC.
Reel/Frame 059066/0040 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Nov 1, 2019
From: LOCKPATH, INC.
To: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
Reel/Frame 050911/0969 →
FIRST LIEN PATENT SECURITY AGREEMENT Recorded Nov 1, 2019
From: LOCKPATH, INC.
To: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
Reel/Frame 050911/0873 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 20, 2019
From: NORMAN, TIMOTHY R.
To: LOCKPATH, INC.
Reel/Frame 050108/0322 →
Continuity (3)
Continuation 14642641 · Mar 9, 2015
Provisional Application 62012308 · Jun 14, 2014
Related Publication 20180189397A1 · Jul 5, 2018