The present application claims the benefit of priority to 62/748,311, filed on Oct. 19, 2018, which is hereby incorporated by reference in its entirety.
Interactions occur with a database by submission of commands that cause the database to perform operations on the database data. For the database server to process the commands, the commands typically conform to a database language supported by the database server. An example of a commonly used database language supported by many database servers is known as the Structured Query Language (SQL).
When a database server receives the original statement of a database command (e.g., from a database application), the database server must first determine which actions should be performed in response to the database command, and then perform those actions. A query processor may process the database statement to prepare the acts necessary for performance of the desired actions within the database. The initial action to analyze and break the database statement into its constituent parts may be referred to as “parsing” the database command. “Compilation” of the database command may then be performed to create the specific composition and sequence of actions to take against delineated set(s) of database objects, as well as code generation that may be necessary to create an executable version of the database statement. Since there may be multiple alternative processing paths that can be taken to achieve the same result within a database, “optimization” may be performed to identify specific processing paths that can be selected to improve the efficiency of processing for the database command. The actual performance of the actions applied to the database is generally referred to as “executing” the database command.
Database applications (such as relational database management system or “RDBMS” applications) routinely need to write functions that are then used in SQL statements. Typically, the language used for these functions is different than the SQL expression language. For example, various extensions to the SQL language have been implemented, such as PL/SQL or SQL/PSM, in order to provide procedural functionality for SQL-based applications. Other types of languages, such as JAVA or C, have also been used to create functions that are usable within a SQL query.
When a non-SQL function is used in conjunction with a SQL query, the difference in the languages will cause two or more different evaluation engines to interoperate with each other, where a first evaluation engine handles the SQL portion of the query and a second evaluation engine handles the non-SQL portion of the query. For example, a SQL virtual machine (VM) may be employed to handle the SQL portion of the query, while a PL/SQL or Java VM is employed to handle the respective PL/SQL or Java functions within the query.
However, the multiple evaluation engines will operate by treating each other like black boxes with data being passed between them. One problem with this approach of treating each other like black boxes is that, since these engines appear as black boxes to each other, it becomes very difficult if not impossible to adequately optimize the interactions between them. This may therefore also lead to suboptimal plan generation for the SQL queries. In addition, using the multiple evaluations with each other and the requirement to pass data between them will cause poor performance for database processing, e.g., due to the overhead of making calls between the engines (such as remote procedure calls or RPCs) and/or additional overhead due to context switching between the engines.
What is needed, therefore, is a method and/or system that overcomes these problems, and which more efficiently implements interactions between SQL and non-SQL statements in a database system.
Embodiments of the present invention provide a system, method, and computer program product of an approach to define non-SQL functions as a SQL macro, which is then processed inline with SQL statements. By inlining the macro into SQL, this approach avoids cross-engine context switches as well as making it possible for a SQL query optimizer to generate better plans that execute more efficiently.
Other additional objects, features, and advantages of the invention are described in the detailed description, figures, and claims.
The drawings illustrate the design and utility of some embodiments of the present invention. It should be noted that the figures are not drawn to scale and that elements of similar structures or functions are represented by like reference numerals throughout the figures. In order to better appreciate how to obtain the above-recited and other advantages and objects of various embodiments of the invention, a more detailed description of the present inventions briefly described above will be rendered by reference to specific embodiments thereof, which are illustrated in the accompanying drawings. Understanding that these drawings depict only typical embodiments of the invention and are not therefore to be considered limiting of its scope, the invention will be described and explained with additional specificity and detail through the use of the accompanying drawings in which:
Various embodiments will now be described in detail, which are provided as illustrative examples of the invention so as to enable those skilled in the art to practice the invention. Notably, the figures and the examples below are not meant to limit the scope of the present invention. Where certain elements of the present invention may be partially or fully implemented using known components (or methods or processes), only those portions of such known components (or methods or processes) that are necessary for an understanding of the present invention will be described, and the detailed descriptions of other portions of such known components (or methods or processes) will be omitted so as not to obscure the invention. Further, various embodiments encompass present and future known equivalents to the components referred to herein by way of illustration.
Embodiments of the present invention provide a system, method, and computer program product of an approach to define non-SQL functions as a SQL macro, which is then processed inline with SQL statements. By inlining the macro into SQL, this approach avoids cross-engine context switches as well as making it possible for a SQL query optimizer to generate better plans that execute more efficiently.
For purposes of illustration, various embodiments of the invention may be described with respect to PL/SQL functions as examples of non-SQL functions that may be used in conjunction with SQL. Therefore, various embodiments of the present invention provide and disclose a system, method, and computer program product that allows use of PL/SQL package mechanism to define macros which leverages a PL/SQL language module mechanism. By inlining the macro into SQL, this approach avoids cross VM switches as well as making it possible for SQL query optimizer to generate better plans that execute more efficiently. It is noted, however, that the inventive concept is not limited only to PL/SQL, and indeed, may be employed in conjunction with any suitable processing/programming language.
As discussed above and as illustrated in
In some embodiments, when a name resolution hard-parse is performed on the SQL statement 110, the database system can recognize that the function 112′ is a non-SQL function (e.g., PL/SQL function), and an additional check is made whether the function is a SQL macro. If the function 112′ is of type SQL_MACRO, then as described in more detail below, the SQL macro text will be obtained from macro 115. The original SQL statement 110 having the non-SQL function is then rewritten (at 120) into a revised SQL statement 110′ that no longer includes a non-SQL function. Instead, the revised SQL statement 110′ includes one or more SQL expressions 114 that performs the functionality of the non-SQL function. The SQL macro text is implemented using any suitable combination of SQL expressions to accomplish the desired functionality.
The SQL processing engine 102 is then used to process the SQL statement 112′. Since the statement 112′ no longer includes a non-SQL function, this means that the second processing engine 104 does not need to be called to process the SQL statement. Instead, the entire statement can be processed with just the SQL processing engine 102.
This approach therefore permits efficient and effective optimization of the database statement, since only the one processing engine 102 is needed to process the statement. In addition, performance improvements are achieved since there is no longer the need to perform RPCs between the two engines, as well as elimination of overhead to perform context switching when switching between multiple engines.
At 204, a determination is made whether the function is defined as a SQL macro. In some embodiments, the database processing code checks if a SQL_MACRO bit is set for the function. If the function is not of type SQL_MACRO, then multiple processing engines are employed to handle the SQL application. Therefore, a SQL processing engine is used to process the SQL-specific statements and at 210 a non-SQL processing engine is used to process the non-SQL function.
If, however, the function is of type SQL_MACRO, then at 206, the query will be rewritten using SQL expression(s) in-place of the non-SQL function. In particular, the text will be obtained from SQL macro, and one or more functionally equivalent SQL expressions are inserted with the appropriate column/table identifiers and suitably generated return strings to provide the correct processing results as if the non-SQL functions are executed.
Thereafter, at 208, the rewritten query is processed using only the SQL processing engine. Since the rewritten query no longer includes the non-SQL function, this means that no calls need to be made to the non-SQL processing engine.
Next, at 304, the string is augmented with name resolution text from the SQL query. For instance, the specific column(s) and table(s) referenced in the query are used to augment the SQL text constructed from the SQL macro. At 306, the SQL macro string is parsed, and the original function call in the original query is then replaced by the new query block. Thereafter, at 308, one or more optimizations may be applied to the rewritten query, as illustrated in more detail below.
In effect, the approach takes the return value(s) text from the SQL macro as a string, and then builds a new SQL statement that is fully self-contained that does not require a call to the original non-SQL function. If the actual parameters are binds, correlated columns, or scalar sub-queries, then NULL will be passed in, otherwise the actual literal value specified in the query will be passed in.
Table Emp is shown as table 454 in database 452, with this table having two column “Name” and “Salary”. The SQL processing engine 402 is used to process the SQL-based portions of the query, and this SQL processing engine 402 interoperates with the non-SQL processing engine 404 to handle the non-SQL portions of the query (the non-SQL function 412). In particular, the values in the “Salary” column 456 for each of the rows (value 100 from row 460, value 200 from row 462, value 300 from row 464) are retrieved from the table 454, which are then passed from the first processing engine (SQL processing 402) to the second processing engine (non-SQL processing engine 404). The non-SQL processing engine 404 would then execute the function 412 as indicated (to add 1 to each of the input values) and then provide the return values back to the SQL processing engine 402 ((100+1)->101, (200+1)->202, (300+1)->302).
As previously noted, this approach is problematic since the second processing engine 404 appears as a black box to the first processing engine 402, and takes a performance hit due to the need to perform remote processing between the two engines.
This results in the construction of a SQL expression “Select (n+1) . . .” having the return string from the SQL macro 412′. The “From” clause of the SQL expression is revised to include another “select” statement as follows: “. . . From (select emp.salary n from DUAL)”. Here, the select statement refers to the “salary” column 456 that is tied to the variable n, which binds to the column referred to in the original SQL query 410. This is in effect the argument(s) that are taken from the original SQL query to construct the new SQL expression.
The “. . . from DUAL” clause is a construct that refers to a one column dummy table that may be used in certain database systems for handling internal database views. For example in database systems provided by Oracle Corporation, DUAL refers to a special one row, one column table presented by default in all Oracle databases where the table has a single VARCHAR2(1) column called DUMMY that has a value of ‘X’. The MySQL database system also allows DUAL to be specified as a table in queries that do not need data from any tables. In SQL Server systems, the DUAL table does not exist, but one can be created for the same purpose as discussed above. Here, the dummy table is provided to effect a view to hold processing data for processing the rewritten return text into a statement in the context of the SQL query.
The result of the query rewriting is that the revised query 460 no longer includes a non-SQL function. Instead, the query 460 includes only native SQL expressions. As illustrated in
One or more optimizations may be implemented for the rewritten query, e.g., where artifacts in the SQL expression that remain from the non-SQL function and/or from the rewriting process are removed if unnecessary to the correct functioning of the SQL expressions.
For example, the rewritten query 460 includes the reference to the dummy table “DUAL”. If appropriate, the SQL expression can be optimized to remove the reference to the dummy table. Here, as illustrated in
As noted above, the transformation that is applied may be specific to the type of expression that needs to be processed. The next sections of this disclosure will provide detailed descriptions of approaches to perform transformations of scalar expressions and table expressions according to certain embodiments of the invention.
For scalar expressions (e.g., those which show up in the select-list, where, group by, and having clauses) the transformation is as follows: Suppose the macro function, <F>, returns the string <macro-generated-sq1-string>, then the macro invocation with actual parameters <a1>. . . <an> are replaced as illustrated by example 601 in
This approach is taken where <a1>. . . <an> are the actual parameters while <f1>. . . <fn> are the formal parameters. If the actual parameter <ak> is being defaulted then it is still represented in the generated query block with: “<defaultk>as <ak>”. This rewrite is applicable even if the generated query blocks are not removed, but the code is rewritten to remove the two generated query blocks (e.g., with post name resolution).
The wrapped macro expanded text will then be fed to a parser to convert it into query blocks (e.g., using a processing approach that can be used to obtain view text from view$). The query blocks will then be processes as a regular scalar subquery block. After the name resolution completes successfully, the approach can then strip out the inserted query blocks and end up with the query 602″ shown in
The transformation for table expressions is fairly similar to the one outlined above for scalar expression, with the main difference for macros returning table expressions is that they should be configured as “from-clause” views. Suppose the macro function <V>>, returns the string <macro-generated-sql-string>, then the macro invocation with is called with the actual table parameters <at1>. . . <atk> and actual scalar parameter <as1>. . . <asp>, then the macro invocation is replaced by the from-clause/inline view 702 as shown in
Similar to the above discussion about scalar expressions in the previous section, <ft1>. . . <ftk> are the formal table parameters and <fs1>. . . <fsp> are the formal scalar parameters, plus the defaulted parameters are represented in the replacement expression even if the SQL query did not specify them. A technical restriction may be applicable in certain circumstances where table valued parameters do not have default values, In addition, the approach of representing the query holding the scalar valued parameter is lateral joined as opposed to expressed as a with-clause is an optional action that may be avoided in some embodiments.
Consider again this transformation with a simple example.
The code returned by the macro generating function is the following: “select * from t where dbms random.value <=sample.pct/100”. The generated code which brackets that returned macro code is the following:
This wrapped macro expanded text will then be fed to a parser to convert it into query blocks (just as view text obtained from view$ is processed). The query blocks will then be processed as a regular scalar subquery block. After the name resolution completes successfully, the approach will strip out the inserted query blocks (since the optimizer may be unable to do it) and end up with the query 707 shown in
It is noted that the rewritten SQL query for scalar expressions and table expressions may be somewhat different. The SQL compiler will be able to distinguish these two cases based at least on where the SQM is called (if from the FROM-clause or elsewhere).
Therefore, what has been described is an improved approach for handling non-SQL functions, where a non-SQL function is implemented as a SQL macro. This permits the database system to process the functionality of the non-SQL function inline with SQL-language statement in a SQL query. This approach avoids cross-engine context switches as well as making it possible for a SQL query optimizer to generate better plans that execute more efficiently.
According to one embodiment of the invention, computer system 1400 performs specific operations by processor 1407 executing one or more sequences of one or more instructions contained in system memory 1408. Such instructions may be read into system memory 1408 from another computer readable/usable medium, such as static storage device 1409 or disk drive 1410. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions to implement the invention. Thus, embodiments of the invention are not limited to any specific combination of hardware circuitry and/or software. In one embodiment, the term “logic” shall mean any combination of software or hardware that is used to implement all or part of the invention.
The term “computer readable medium” or “computer usable medium” as used herein refers to any medium that participates in providing instructions to processor 1407 for execution. Such a medium may take many forms, including but not limited to, non-volatile media and volatile media. Non-volatile media includes, for example, optical or magnetic disks, such as disk drive 1410. Volatile media includes dynamic memory, such as system memory 1408.
Common forms of computer readable media includes, for example, floppy disk, flexible disk, hard disk, magnetic tape, any other magnetic medium, CD-ROM, any other optical medium, punch cards, paper tape, any other physical medium with patterns of holes, RAM, PROM, EPROM, FLASH-EPROM, any other memory chip or cartridge, cloud-based storage, or any other medium from which a computer can read.
In an embodiment of the invention, execution of the sequences of instructions to practice the invention is performed by a single computer system 1400. According to other embodiments of the invention, two or more computer systems 1400 coupled by communication link 1415 (e.g., LAN, PTSN, or wireless network) may perform the sequence of instructions required to practice the invention in coordination with one another.
Computer system 1400 may transmit and receive messages, data, and instructions, including program, i.e., application code, through communication link 1415 and communication interface 1414. Received program code may be executed by processor 1407 as it is received, and/or stored in disk drive 1410, or other non-volatile storage for later execution. Data may be accessed from a database 1432 that is maintained in a storage device 1431, which is accessed using data interface 1433.
It should be appreciated that cloud infrastructure system 802 depicted in the figure may have other components than those depicted. Further, the embodiment shown in the figure is only one example of a cloud infrastructure system that may incorporate an embodiment of the invention. In some other embodiments, cloud infrastructure system 802 may have more or fewer components than shown in the figure, may combine two or more components, or may have a different configuration or arrangement of components. Client computing devices 804, 806, and 808 may be devices similar to those described above for
Network(s) 810 may facilitate communications and exchange of data between clients 804, 806, and 808 and cloud infrastructure system 802. Each network may be any type of network familiar to those skilled in the art that can support data communications using any of a variety of commercially-available protocols. Cloud infrastructure system 802 may comprise one or more computers and/or servers.
In certain embodiments, services provided by the cloud infrastructure system may include a host of services that are made available to users of the cloud infrastructure system on demand, such as online data storage and backup solutions, Web-based e-mail services, hosted office suites and document collaboration services, database processing, managed technical support services, and the like. Services provided by the cloud infrastructure system can dynamically scale to meet the needs of its users. A specific instantiation of a service provided by cloud infrastructure system is referred to herein as a “service instance.” In general, any service made available to a user via a communication network, such as the Internet, from a cloud service provider's system is referred to as a “cloud service.” Typically, in a public cloud environment, servers and systems that make up the cloud service provider's system are different from the customer's own on-premises servers and systems. For example, a cloud service provider's system may host an application, and a user may, via a communication network such as the Internet, on demand, order and use the application.
In some examples, a service in a computer network cloud infrastructure may include protected computer network access to storage, a hosted database, a hosted web server, a software application, or other service provided by a cloud vendor to a user, or as otherwise known in the art. For example, a service can include password-protected access to remote storage on the cloud through the Internet. As another example, a service can include a web service-based hosted relational database and a script-language middleware engine for private use by a networked developer. As another example, a service can include access to an email software application hosted on a cloud vendor's web site.
In certain embodiments, cloud infrastructure system 802 may include a suite of applications, middleware, and database service offerings that are delivered to a customer in a self-service, subscription-based, elastically scalable, reliable, highly available, and secure manner.
In various embodiments, cloud infrastructure system 802 may be adapted to automatically provision, manage and track a customer's subscription to services offered by cloud infrastructure system 802. Cloud infrastructure system 802 may provide the cloudservices via different deployment models. For example, services may be provided under a public cloud model in which cloud infrastructure system 802 is owned by an organization selling cloud services and the services are made available to the general public or different industry enterprises. As another example, services may be provided under a private cloud model in which cloud infrastructure system 802 is operated solely for a single organization and may provide services for one or more entities within the organization. The cloud services may also be provided under a community cloud model in which cloud infrastructure system 802 and the services provided by cloud infrastructure system 802 are shared by several organizations in a related community. The cloud services may also be provided under a hybrid cloud model, which is a combination of two or more different models.
In some embodiments, the services provided by cloud infrastructure system 802 may include one or more services provided under Software as a Service (SaaS) category, Platform as a Service (PaaS) category, Infrastructure as a Service (IaaS) category, or other categories of services including hybrid services. A customer, via a subscription order, may order one or more services provided by cloud infrastructure system 802. Cloud infrastructure system 802 then performs processing to provide the services in the customer's subscription order.
In some embodiments, the services provided by cloud infrastructure system 802 may include, without limitation, application services, platform services and infrastructure services. In some examples, application services may be provided by the cloud infrastructure system via a SaaS platform. The SaaS platform may be configured to provide cloud services that fall under the SaaS category. For example, the SaaS platform may provide capabilities to build and deliver a suite of on-demand applications on an integrated development and deployment platform. The SaaS platform may manage and control the underlying software and infrastructure for providing the SaaS services. By utilizing the services provided by the SaaS platform, customers can utilize applications executing on the cloud infrastructure system. Customers can acquire the application services without the need for customers to purchase separate licenses and support. Various different SaaS services may be provided. Examples include, without limitation, services that provide solutions for sales performance management, enterprise integration, and business flexibility for large organizations.
In some embodiments, platform services may be provided by the cloud infrastructure system via a PaaS platform. The PaaS platform may be configured to provide cloud services that fall under the PaaS category. Examples of platform services may include without limitation services that enable organizations to consolidate existing applications on a shared, common architecture, as well as the ability to build new applications that leverage the shared services provided by the platform. The PaaS platform may manage and control the underlying software and infrastructure for providing the PaaS services. Customers can acquire the PaaS services provided by the cloud infrastructure system without the need for customers to purchase separate licenses and support.
By utilizing the services provided by the PaaS platform, customers can employ programming languages and tools supported by the cloud infrastructure system and also control the deployed services. In some embodiments, platform services provided by the cloud infrastructure system may include database cloud services, middleware cloud services, and Java cloud services. In one embodiment, database cloud services may support shared service deployment models that enable organizations to pool database resources and offer customers a Database as a Service in the form of a database cloud. Middleware cloud services may provide a platform for customers to develop and deploy various business applications, and Java cloudservices may provide a platform for customers to deploy Java applications, in the cloud infrastructure system.
Various different infrastructure services may be provided by an IaaS platform in the cloud infrastructure system. The infrastructure services facilitate the management and control of the underlying computing resources, such as storage, networks, and other fundamental computing resources for customers utilizing services provided by the SaaS platform and the PaaS platform.
In certain embodiments, cloud infrastructure system 802 may also include infrastructure resources 830 for providing the resources used to provide various services to customers of the cloud infrastructure system. In one embodiment, infrastructure resources 830 may include pre-integrated and optimized combinations of hardware, such as servers, storage, and networking resources to execute the services provided by the PaaS platform and the SaaS platform.
In some embodiments, resources in cloud infrastructure system 802 may be shared by multiple users and dynamically re-allocated per demand. Additionally, resources may be allocated to users in different time zones. For example, cloud infrastructure system 830 may enable a first set of users in a first time zone to utilize resources of the cloud infrastructure system for a specified number of hours and then enable the re-allocation of the same resources to another set of users located in a different time zone, thereby maximizing the utilization of resources.
In certain embodiments, a number of internal shared services 832 may be provided that are shared by different components or modules of cloud infrastructure system 802 and by the services provided by cloud infrastructure system 802. These internal shared services may include, without limitation, a security and identity service, an integration service, an enterprise repository service, an enterprise manager service, a virus scanning and white list service, a high availability, backup and recovery service, service for enabling cloud support, an email service, a notification service, a file transfer service, and the like.
In certain embodiments, cloud infrastructure system 802 may provide comprehensive management of cloud services (e.g., SaaS, PaaS, and IaaS services) in the cloud infrastructure system. In one embodiment, cloud management functionality may include capabilities for provisioning, managing and tracking a customer's subscription received by cloud infrastructure system 802, and the like.
In one embodiment, as depicted in the figure, cloud management functionality may be provided by one or more modules, such as an order management module 820, an order orchestration module 822, an order provisioning module 824, an order management and monitoring module 826, and an identity management module 828. These modules may include or be provided using one or more computers and/or servers, which may be general purpose computers, specialized server computers, server farms, server clusters, or any other appropriate arrangement and/or combination.
In operation 834, a customer using a client device, such as client device 804, 806 or 808, may interact with cloud infrastructure system 802 by requesting one or more services provided by cloud infrastructure system 802 and placing an order for a subscription for one or more services offered by cloud infrastructure system 802. In certain embodiments, the customer may access a cloud User Interface (UI), cloud UI 812, cloud UI 814 and/or cloud UI 816 and place a subscription order via these UIs. The order information received by cloud infrastructure system 802 in response to the customer placing an order may include information identifying the customer and one or more services offered by the cloud infrastructure system 802 that the customer intends to subscribe to.
After an order has been placed by the customer, the order information is received via the cloud UIs, 812, 814 and/or 816. At operation 836, the order is stored in order database 818. Order database 818 can be one of several databases operated by cloud infrastructure system 818 and operated in conjunction with other system elements. At operation 838, the order information is forwarded to an order management module 820. In some instances, order management module 820 may be configured to perform billing and accounting functions related to the order, such as verifying the order, and upon verification, booking the order. At operation 840, information regarding the order is communicated to an order orchestration module 822. Order orchestration module 822 may utilize the order information to orchestrate the provisioning of services and resources for the order placed by the customer. In some instances, order orchestration module 822 may orchestrate the provisioning of resources to support the subscribed services using the services of order provisioning module 824.
In certain embodiments, order orchestration module 822 enables the management of business processes associated with each order and applies business logic to determine whether an order should proceed to provisioning. At operation 842, upon receiving an order for a new subscription, order orchestration module 822 sends a request to order provisioning module 824 to allocate resources and configure those resources needed to fulfill the subscription order. Order provisioning module 824 enables the allocation of resources for the services ordered by the customer. Order provisioning module 824 provides a level of abstraction between the cloud services provided by cloud infrastructure system 802 and the physical implementation layer that is used to provision the resources for providing the requested services. Order orchestration module 822 may thus be isolated from implementation details, such as whether or not services and resources are actually provisioned on the fly or pre-provisioned and only allocated/assigned upon request.
At operation 844, once the services and resources are provisioned, a notification of the provided service may be sent to customers on client devices 804, 806 and/or 808 by order provisioning module 824 of cloud infrastructure system 802.
At operation 846, the customer's subscription order may be managed and tracked by an order management and monitoring module 826. In some instances, order management and monitoring module 826 may be configured to collect usage statistics for the services in the subscription order, such as the amount of storage used, the amount data transferred, the number of users, and the amount of system up time and system down time.
In certain embodiments, cloud infrastructure system 802 may include an identity management module 828. Identity management module 828 may be configured to provide identity services, such as access management and authorization services in cloud infrastructure system 802. In some embodiments, identity management module 828 may control information about customers who wish to utilize the services provided by cloud infrastructure system 802. Such information can include information that authenticates the identities of such customers and information that describes which actions those customers are authorized to perform relative to various system resources (e.g., files, directories, applications, communication ports, memory segments, etc.) Identity management module 828 may also include the management of descriptive information about each customer and about how and by whom that descriptive information can be accessed and modified.
In the foregoing specification, the invention has been described with reference to specific embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention. For example, the above-described process flows are described with reference to a particular ordering of process actions. However, the ordering of many of the described process actions may be changed without affecting the scope or operation of the invention. The specification and drawings are, accordingly, to be regarded in an illustrative rather than restrictive sense. In addition, an illustrated embodiment need not have all the aspects or advantages shown. An aspect or an advantage described in conjunction with a particular embodiment is not necessarily limited to that embodiment and can be practiced in any other embodiments even if not so illustrated. Also, reference throughout this specification to “some embodiments” or “other embodiments” means that a particular feature, structure, material, or characteristic described in connection with the embodiments is included in at least one embodiment. Thus, the appearances of the phrase “in some embodiment” or “in other embodiments” in various places throughout this specification are not necessarily referring to the same embodiment or embodiments.
Number | Date | Country | |
---|---|---|---|
62748311 | Oct 2018 | US |