Method and an apparatus for developing software

A software component, is constructed on the basis of a set of predetermined rules, and by utilizing a source object, a token value and a parameter, wherein the source object is stored in a source object repository, and wherein the source object comprises a component value and/or a token value, wherein the component value may be associated with the token value. For constructing the software component, the token value is processed and a token result, obtained by processing the token value, is utilized for constructing the software component, wherein the parameter may also be utilized for the processing of the token value and/or constructing the software component.

BACKGROUND

This invention relates to the field of software development.

2. Description of the Related Art

Software development includes development of new software, maintenance of developed software, and quality assurance of developed software, wherein the maintenance includes a change and/or a modification in developed software, and wherein the quality assurance includes testing and/or debugging of developed software.

In software development, one of the biggest impediments is the large, many times prohibitive, amount of resources required for developing and maintaining even a small computer program. Moreover, the resources required for software development increase exponentially in proportion to the number of features required in a computer program. Also, the required resources can further grow astronomically for computer programs that must exclude any chance of an error and/or a malfunctioning.

At the same time, the expectations and requirements from software are increasing rapidly because of the swiftly increasing processing power and capabilities of computers. However, because of the limitations of available resources, such as, human resource, financial resource, time resource, technical resource, and the like, the art is still unable to develop, and utilize software to its full potential.

To address the above serious impediment, various technologies have been developed over time, but none has been able to effectively solve this problem so far. Such technologies include CASE tools, data driven programming, table driven programming, object oriented programming, CORBA (Common Object Request Broker Architecture), MDA (Model-Driven Architecture), RAD (Rapid Application Development), software factories, and the like. All these technologies have reduced, to some extent, the resource requirements for software development. These technologies have also enabled, somewhat, efficient utilization of the resources required for software development. Simultaneously, though, ever-increasing complexities, as well as exponential rises in functional requirements from software have meant that whatever benefits emanated from such technologies have not been enough to meet the growing demands from software.

In addition to the above mentioned technologies, many computer programs and development environments have been developed for reducing the resource requirement for the software development process. Such computer programs and development environments include, but are not limited to, MS-VISUAL STUDIO, GNAT PROGRAMMING STUDIO, IBM RATIONAL APPLICATION DEVELOPER, POWERBUILDER, C++BUILDER, XCODE, NETBEANS, DELPHI, LAZARUS, CRYSTAL REPORTS, MICROSOFT ACCESS, ORACLE DATABASE, and MICROSOFT SQL SERVER. While these computer programs and development environments have managed to automate a small number of mechanical tasks, they have not been effective in reducing the excessive resource requirements for software development.

Consider, for instance, a computer application which is required to comprise a couple of hundred reports which are desired to be based on MICROSOFT SQL Server database and are specifically designed for MICROSOFT ACCESS reporting engine and a letter size paper. In the prior art, each report, along with its required query, would have to be developed by a software developer. This process may take tens of thousands of hours of a skilled computer programmer. If the same reports are required to be ported to an ORACLE platform and CRYSTAL REPORTS with report layouts for an A4 size paper, the resource expenditure might be even greater than what was required for the original development.

The humongous and unmanageable resource requirement for software development is not only related to reports and queries, but also to every stage and aspect of software development. However, despite the availability of so many technologies, environments and applications, the prior art has been unable to meet the challenge of minimizing the required resources for software development to a desired, and an effective level.

Software development should, ideally, achieve three objectives simultaneously: maximizing features, ensuring highest quality, and minimizing software development resources. However, the prior art has failed to achieve all three objectives in conjunction; in every software development, one or more of these objectives have to be compromised.

SUMMARY

The major challenge in the prior art, that of minimizing resources, (man, technology, money, and time) required for software development, as well as in the maintenance and quality assurance of developed software, has been effectively met by the embodiments of the present invention.

According to an embodiment of the present invention, a new method for developing software is provided which empowers a machine (e.g. a computer) to function like a human software developer. A data token is defined, created and associated with a source code to enable the machine (e.g. a computer) to perform software development (enable the machine to generate or construct further source code, object code, and/or an object).

According to another embodiment of the present invention, a method is provided to streamline and simplify a source code which is required to develop software. A source object is created and utilized as the source code by the machine (e.g. a computer) to perform software development.

According to another embodiment of the present invention, a method is provided for creating a source object repository to store a source object. The source object repository enables easy creation, manageability, and reusability of a source object.

According to another embodiment of the invention, a method is provided for associating a data token to a source object in a manner that enables a computer to generate a complete source code by utilizing the source object and the associated data token.

Embodiments of the present invention provide numerous technical and commercial advantages. For example, according to an embodiment of the present invention, the time and resources required for software development are reduced substantially. According to another embodiment of the present invention, the available features and options in developed software are increased substantially.

The extraordinary benefits of applying the principles of the present invention will change the way software development is conceived and carried out. The inventive concepts and principles will create endless new possibilities and horizons—far beyond queries, reports, data entry forms, menus, business processing rules, help systems, exception handling systems, and the like—that are unknown and unthinkable in the prior art.

Many more advantages will be readily apparent to one who is skilled in the art.

Some of the terms used herein are not commonly used in the art. The discussion of the present invention utilizes some terms in a specific sense. Therefore, the following definitions are provided in order to ensure clarity, as well as to facilitate the understanding of the detailed description that follows. However, the invention, as set forth in the claims, should not necessarily be limited by these definitions.

A “data value” is a unit of data which comprises a piece of information and which requires at least one bit for a representation in a computer readable recording medium. Anything that can be stored in a computer readable recording medium is a data value. Examples of a data value may include, but are not limited to, a name, an age, a date, a time, a number, a text string, an object, an image, an audio, a video, a signal, a formula, a source code, an object code, a variable name, a variable value, a field name, an alphanumeric character, binary data, alphanumeric data, a bit, a short integer, a long integer, a NULL value, and an empty value.

A “software component”142refers to a source code of a computer programming language, an object code of a processor (real and/or virtual), and/or an object, which is at least one part of a software, wherein the one part of software is utilized during execution of the software or a part thereof, that is executed either by a processor or by another software (computer program) in case of virtualization, wherein the processor is either a real (physical) computer processor or an emulator (virtual computer processor). A software component comprises one or more source components which are put together on the basis of “a set of predetermined rules”140wherein each of the one or more source components is represented by at least one data value. A software component may comprise one or more other software components. Examples of a software component142may include, but are not limited to:

1. An SQL query is a software component.

2. A WHERE clause of an SQL query is a software component.

3. A report layout is a software component.

4. A software object created on a basis of a class model is a software component.

5. A font object is a software component.

6. A data structure is a software component.

7. A database view is a software component.

8. A database table is a software component.

9. A data entry form is a software component.

10. A spreadsheet is a software component.

Examples of a software component142comprising another software component may include, but are not limited to:1. An SQL query, which is a software component, comprising a WHERE clause, which is also a software component.2. An SQL view, which is a software component, comprising two SQL views, which are also software components.3. A report layout, which is a software component, comprising a font object, which is also a software component.

A “source component”144is represented by at least one data value, hereinafter called component value146, in a software component142. In other words, a source component144is just like a property of a software object, whereas a component value146is just like the value of the property of the software object. Examples of a source component144may include, but are not limited to:1. Paper size is a source component of a report layout, which is a software component. The paper size is represented by at least one component value in a report layout. Component values which represent a paper size in a report layout may include, but are not limited to, A4, A3, Letter, and 8.5″×11″.2. Background color is a source component of a data entry form, which is a software component. The background color may be represented by one or more component values in a data entry form object.3. In an SQL query, which is software component, a command is a source component.

Component values which represent the command in an SQL query may include, but are not limited to, SELECT, UPDATE, DELETE, INSERT INTO, CREATE DATABASE, ALTER DATABASE, and the like.4. A whitespace is a source component of a source code block, which is a software component, of a computer programming language. Component values which represent the whitespace may include, but are not limited to, a space character, and a tab character.5. The width of a textbox is a source component of a textbox object, which is a software component. The width of a textbox may be represented by a component value of a numeric data type.6. A tax rate is a source component of a tax calculation business rule, which is a software component. The tax rate may be represented by a component value of a numeric data type.7. A mnemonic is a source component of a source code block, which is a software component, of an assembly language. Component values which represent the mnemonic may include, but are not limited to, MOV, XOR, and CMP.

A “set of predetermined rules”140comprises one or more predetermined rules that are sufficient for constructing a software component. A set of predetermined rules is specified in terms of one or more source components, wherein each of the one or more source components is represented by at least one component value in a software component. Examples of a set of predetermined rules140may include, but are not limited to1. A set of predetermined rules for creating an SQL query, which is a software component, according to SQL:2008 standard.2. A set of predetermined rules for creating an SQL query, which is a software component, which creates a table in an ORACLE database.3. A set of predetermined rules for creating a form, which is a software component, in MICROSOFT VISUAL BASIC 6.4. A set of predetermined rules for creating a report layout, which is a software component, in CRYSTAL REPORTS.5. A set of predetermined rules for calculating the premium of a specific insurance policy in a software application, which is a software component.6. A set of predetermined rules for creating a formula, which is a software component, in an EXCEL worksheet.

A “user” is someone who develops, installs, utilizes, and/or configures a computer program. A user may include, but is not limited to, a human being, a machine, and a computer program. It is possible that a user is also a developer of the same computer program that the user utilizes.

A “data token”152comprises a set of data token rules158and is represented by a data value, hereinafter called token value154, wherein the token value is processed on the basis of the set of data token rules, and then the result of the processed token value, which is also a data value, hereinafter called token result156, is utilized for constructing a software component. The set of data token rules is specified at the time of defining a data token, wherein the set of data token rules comprises one or more rules which specify one or more manners in which a token value can be associated with a component value of a source component of a software component, can be processed, and/or can be utilized. The processing of a token value may include, but is not limited to, executing a function, performing a comparison, creating a component value, determining a manner in which a software component is constructed, identifying one or more component values for utilizing in a software component, or any combinations thereof. A token value may be determined by utilizing a parameter. A token value can also be associated with another token value. A token value can be nested in another token value of the same and/or a different data token.

Following are a few examples of a data token152:1. tknCompare is a data token152which is represented by a token value Comp(A,B). When Comp(A,B) is processed according to its set of data token rules158, the token result of the processed Comp(A,B) is utilized for constructing a software component. The token value Comp(A,B) of the data token tknCompare is processed on the basis of the following set of data token rules, wherein A and B arc may be determined by utilizing two parameter values:a. If A>B, then the token result is 1,b. If A=B, then the token result is 0, andc. If A<B, then the token result is −1.In other words, in this example, the token value of the data token tknCompare acts like a function which returns one of the three possible values 1, 0, or −1.In this example “A” represents total sales and “B” represents total cost of sales. tknCompare is utilized for determining a type of report that is to printed at runtime, if token result is 1 then a profit summary is printed, if token result is 0 then a breakeven report is printed, and if token result is −1 then a loss report is printed. In this manner, tknCompare enables a software component constructor170to generate an appropriate report on the basis of the values of “A” and “B”.2. tknRetrieve is a data token152which is represented by a token values tknpept( ). A set of data token rules158for processing tknRetrieve specifies that the token value tknpept( ) is processed in such a manner that it returns all department codes from a database table called tblDepartment, hosted on a specific database server, which comprises department codes. The returned department codes, which represent a token result, are then utilized for constructing a desired software component, for example a crosstab SQL query.Since number of departments may vary from time to time, tknRetrieve enables a software component constructor170to create an appropriate query, at runtime, on the basis of departments returned as a token result156when tknDept( ) token value154of tknRetrieve, is processed.3. tknJoinType is a data token152which is utilized for constructing a SELECT query, which is a software component. According to a set of data token rules158of tknJoinType, the data token tknJoinType can be represented by one of the following token values, wherein each of the token values is illustrated along with a rule which specifies a manner in which the token value may be utilized:a. 0—No Join (a query will be constructed without any join because the first character of the token value is 0),b. 1—Inner Join (a query will be constructed with INNER JOIN because the first character of the token value is 1),c. 2—Left Join (a query will be constructed with LEFT JOIN because the first character of the token value is 2), andd. 3—Right Join (a query will be constructed with RIGHT JOIN because the first character of the token value is 3).A token value154of tknJoinType may be retrieved by utilizing a parameter value162obtained from a user at runtime and an SQL query may be constructed by a software component constructor170accordingly.

A “source object”166comprises:1. a component value146,2. a token value154,3. a data value, which specifies:a. an identity of a source object166,b. a meta data describing a source object166,c. a relation, order, and/or hierarchy among a component value146and a token value154,d. a relation, order, and/or hierarchy among a plurality of component values146n,e. a relation, order, and/or hierarchy among a plurality of token values154n,f. reference to a component value146,g. reference to a token value154,h. reference to another source object166, ori. any combinations thereof, or4. any combinations thereof.

A “software component constructor”170is a computer program which is sufficient for constructing a software component142, or a part thereof, on the basis of a set of predetermined rules140and by utilizing a source object166, a component value146, a token value154, a token result156, or any combinations thereof, wherein a source object166, a component value146, and/or a token value154may be determined by utilizing a parameter value162. A software component constructor may be a single computer program or a plurality of computer programs that are integrated and/or interfaced with each other. A software component constructor may adapt a set of predetermined rules, on which the software constructor is based, in a manner that no rule of the set of predetermined rules is violated to an extent that a software component cannot be constructed on the basis of the adapted set of predetermined rules. For example, a query builder, a software component constructor, which constructs SQL queries for DB2, MICROSOFT ACCESS, MICROSOFT SQL Server, ORACLE, and/or SYBASE, is a software component constructor. Another example of a software component constructor is a report creator which creates report layouts for CRYSTAL REPORTS.

A “source object repository”168comprises one or more data structures and is utilized for storing a source object166in a computer readable recording medium, wherein the source object repository is created on the basis of a data model which is suitable and sufficient for creating a source object repository that is suitable and sufficient for:1. Compulsorily:a. storing one or more source objects as structured and/or semi-structured data, andb. identifying and retrieving a desired source object out of the one or more source objects.2. Optionally, if desired:a. implementing and maintaining, in a desired manner, a desired hierarchy and/or a desired relationship among all such source components which are comprised in a source object,b. implementing and maintaining a desired order among one or more component values belonging to a source component that represents the one or more component values,c. utilizing a source object and/or a desired part thereof in another source object,d. associating one or more data tokens with one or more component values of one or more source objects, ande. any combinations thereof.

A data structure comprised by the source object repository may include, but is not limited to, a database table, a class, an array, a linked list, a variable, a multidimensional array, a multidimensional database, a conventional database, a flat file, a delimited text file, and a parameter.

A “computer program”, as used herein, is defined as an executable sequence of instructions designed for execution on a processor either directly and/or via another computer program. The computer program may include, but is not limited to, a subroutine, a function, a procedure, an interpreter, an object method, and an object implementation in an executable application, an applet, a servlet, an executable source code, an object code, an ActiveX, and a shared library/dynamic load library. A computer program is also known as software.

The terms “a” or “an”, as used herein, are defined as one or as more than one. The term “plurality”, as used herein, is defined as two or as more than two. The term “another”, as used herein, is defined as at least a second or more.

The terms “including/include/includes”, and/or “have/having/has”, as used herein, are defined as “comprising/comprises” (i.e., open language).

Creation, utilization, association, and/or processing of a data token, as used herein, is defined as creation, utilization, association, and/or processing of a token value of the data token.

Utilization of a parameter, as used herein, is defined as utilization of a parameter value of the parameter.

The headings in this detailed description have been inserted for ease of readability and have no interpretative role.

2. The Challenges in Software Development

The main challenges in software development are minimization of:1. resources (man, technology, money and time) required for development and quality assurance of software,2. resources required to maintain developed software and its quality assurance, and3. particularly, the time required to develop and maintain software, as well as ensure quality assurance, even if other resources (human, financial, and technical) are adequately available.

The prior art in software development has failed to effectively address and meet the above challenges in software development because of the serious limitations that have been discussed in the ‘BACKGROUND’ section.

It is to be noted that, in the current environment, the expectations and requirements from software are rising rapidly because of the rapidly increasing processing power and capabilities of computers. However, because of the scarcity of available resources, such as human resource, financial resource, time resource, technical resource, and the like, the art is still unable to develop and utilize software to its full potential.

3. The Causes of the Impediments in Software Development

After extensive research and detailed analysis of a wide range of existing computer programs, as well as the existing software development technologies, methodologies, tools, environments, and applications, the inventor identified the following main causes of the prohibitive resource requirements for software development in the prior art:1. The available techniques, tools, and options for developing software are generally time intensive even for a person who is skilled, well trained, and experienced in the art.2. Despite the availability of many advanced technologies, comprehensive software development tools, debugging tools, and quality assurance tools, most of the development and quality assurance of software is carried out by human beings; some machine assistance is available but is insufficient and inefficient. It is recognized that software development by human beings has some inherent limitations, such as:a. A human being cannot work around the clock and is limited by the speed at which he/she can operate.b. Software development requires a high level of training and experience in the art.c. Trained and experienced developers are hard to find, and are very costly.3. Many computer programs are very large and too complex and, therefore, require vast, sometimes prohibitive, amounts of resources for development, maintenance, and/or quality assurance.4. Most of the predetermined rules for developing (writing) software components are designed in a manner that even a small change in a developed computer program may lead to an extensive change in the developed computer program; hence, additional resources are required for any change. In many cases, a change in the developed computer program may require even more resources than were originally spent for developing the computer program. The available technologies and software development tools for facilitating and augmenting this effort are either very complex or provide very little functionality.

4. What Needs to be Done

After finding the primary causes of the impediments in software development, the inventor concluded that the following are required to address the above causes:1. The contribution provided by a computer and/or a machine in developing and maintaining a computer program, and/or in providing quality assurance, needs to be enhanced as much as possible.2. The remaining contribution, which is left to be provided by human beings, needs to be further reduced, in addition to being streamlined and simplified, thereby substantially reducing the human resource requirements in terms of time, number, training, experience, and cost.

5. Inventive Concepts and Methodologies that Address the Challenges in Software Development

The major challenge in the prior art, that of minimizing the resources (man, technology, money, and time) required for software development, maintenance and quality assurance, has been effectively met by the inventor. According to an aspect of an embodiment of the invention, an inventive method enables a computer and/or a machine to function like a human software developer, and to perform most of the software development. Moreover, the inventive method also streamlines and simplifies the remaining portion of the software development left for human software developers.

6. Embodiments and Drawings

While the concept and methodology of the present invention can be practiced in many different forms and embodiments, the embodiments shown in the drawings herein, and described herein in detail, are only a few embodiments thereof with the understanding that the present disclosure is to be considered as exemplary regarding the principles of the invention and is not intended to limit the invention to the embodiments as illustrated in the attached drawings and the descriptions thereof. The invention is intended to cover alternatives, modifications and equivalents, which may be included within the spirit, principles and scope of the invention as defined by the appended claims

In the attached drawings, like reference numerals are used to refer to like elements throughout, and in the descriptions of the drawings, pertinent details have been set forth and explained so as to provide a thorough understanding of the present invention. However, it may be clarified that the present invention may be applied and/or utilized without these specific details.

7. An Embodiment According to an Aspect of the Invention (FIG.1A)

FIG. 1Ais an exemplary flowchart that illustrates as aspect of an embodiment of the invention.

According to an aspect of an embodiment of the invention, at operation20, a source object repository168is created. A source object repository168is utilized to store one or more source objects166ncomprising one or more token values154nand/or one or more component values146nwhich represent one or more indeterminable source components148n. A source object repository168is based on a data model164which is created for a software component on the basis of rules based upon which a software component is written and/or developed. By way of an example, and not a limitation, a data model for an SQL query will base on the syntax of the SQL query. By way of another example, and not a limitation, a data model for a report layout in CRYSTAL REPORTS will base on the object model for reports exposed by CRYSTAL REPORTS.

According to an aspect of an embodiment of the invention, a source object repository168is created on the basis of a data model164.

According to an aspect of an embodiment of the invention, a data model164is created on the basis of a set of predetermined rules140of a software component142(a software source code) and by utilizing one or more indeterminable source components148n.

According to an aspect of an embodiment of the invention, following steps are taken for creating a data model164:1. A set of predetermined rules140is selected, wherein the selected set of predetermined rules140is defined in terms of one or more source components144n.2. Each of the one or more source components144nis categorized into one of the following categories:a. an indeterminable source component148, orb. a determinable source component150.3. One or more data tokens152nalong with their respective sets of data token rules158nare defined.4. A data model164is created on the basis of the selected set of predetermined rules140and by utilizing:a. one or more indeterminable source components148n.b. one or more data tokens152n, orc. any combinations thereof.

According to an aspect of an embodiment of the invention, a data model164enables reusability of a source object166, a data token value154, and/or a component value146.

According to an aspect of an embodiment of the invention, source components144nof a software component (software source code)142are categorized in indeterminable source components148nand determinable source components150n, wherein categorization is done on the basis of:1. rules, based upon which a software component is written/developed,2. desire of a user, or3. any combinations thereof.

By way of an example, and not a limitation, the starting command, which is a source component144, of an SQL query is determinable source component150if the SQL query is to be utilized for viewing records from a database, because such query always starts with command “SELECT”. However, in an SQL query, which can update, insert, view, and/or remove records from a database, the starting command, which is a source component144, of the SQL query is an indeterminable source component148, because starting command cannot be determined without knowing the type of SQL query. The above example shows that if a user wants to write queries only for viewing records from a database then the starting command is a determinable source component150because of the rules for writing queries for viewing records from a database. However, if a user wants to write queries for updating, inserting, viewing, and/or removing records from a database then the starting command will be an indeterminable source component148because of the rules for writing queries for updating, inserting, viewing, and/or removing records from a database.

According to an aspect of an embodiment of the invention, at operation30, a software component constructor (source code generator)170, which is a computer program, is created.

According to an aspect of an embodiment of the invention, a software component constructor170is utilized for constructing (generating) one or more software components144n. By way of an example, and not a limitation, a software component constructor170may be utilized for generating (constructing) an invoice entry form, which is a software component142, at runtime according to a user's requirements which are specified by utilizing one or more parameters160n.

According to an aspect of an embodiment of the invention, a software component constructor170retrieves one or more source objects166nfrom one or more source object repositories168nfor constructing one or more software components142n.

According to an aspect of an embodiment of the invention, a software component constructor170accepts one or more parameter values162nfrom a user at runtime for constructing one or more software components142n.

According to an aspect of an embodiment of the invention, a software component constructor170accepts a parameter value162at a user interface level of a computer program.

According to an aspect of an embodiment of the invention, a software component constructor170is utilized for constructing one or more software components142nat runtime.

According to an aspect of an embodiment of the invention, at operation40, a software component142is constructed by a software component constructor170which utilizes a source object166which is created, before constructing the software component142, and stored in a source object repository168.

According to an aspect of an embodiment of the invention, a source object166can be utilized, with a parameter160, for constructing a plurality of software components142n.

8. An Embodiment According to an Aspect of the Invention (FIG.1B)

FIG. 1Bis an exemplary flowchart that illustrates operations20,30, and40ofFIG. 1Ain greater detail, according to an aspect of an embodiment of the invention.

At terminal108, the exemplary flowchart starts.

According to an aspect of an embodiment of the invention, at operation110, a “set of predetermined rules140” is selected, wherein the set of predetermined rules140is sufficient for constructing a “software component142”, wherein the software component142is a software component that is desired to be constructed. According to an aspect of an embodiment of the invention, the set of predetermined rules140may be adapted as may be desired as long as a predetermined rule in the set of predetermined rules140is not violated to an extent where the software component142cannot be constructed on the basis of the adapted set of predetermined rules. According to an aspect of an embodiment of the invention, a plurality of sets of predetermined rules140n(where n>=1) can be selected. According to an aspect of an embodiment of the invention, a plurality of software components142ncan be constructed on the basis of the set of predetermined rules140. According to an aspect of an embodiment of the invention, the plurality of software components142ncan be constructed on the basis of one or more sets of predetermined rules140n.

Given below are a few examples of a selected set of predetermined rules. The embodiments of the invention are not limited to these examples:1. A set of predetermined rules140for constructing a SELECT query, which is a software component142, for an ORACLE database, wherein the version of the ORACLE database is less than 9.2. A set of predetermined rules140for constructing a SELECT query, which is a software component142, for an ORACLE database, wherein the version of the ORACLE database is 9 or above.3. A set of predetermined rules140for constructing a SELECT query, which is a software component142, for MICROSOFT ACCESS.4. A set of predetermined rules140for constructing a report layout, which is a software component142, in CRYSTAL REPORTS.5. A set of predetermined rules140for creating a computer program, which is a software component142, for processing the payroll of a specific business entity.6. A set of predetermined rules140for creating a software module, which is a software component142, for calculating sales tax in accordance with a specific country's tax laws.7. A set of predetermined rules140for creating a data entry form, which is a software component142, in MICROSOFT VISUAL BASIC 6 environment.

Given below are a few examples of an adaptation of a selected set of predetermined rules. The embodiments of the invention are not limited to these examples:1. A set of predetermined rules140for constructing a SELECT query, which is a software component142, is adapted in a manner that an opening and a closing parentheses is made compulsory for the WHERE clause in the SELECT query.2. A set of predetermined rules140for constructing a report layout, which is a software component142, in MICROSOFT ACCESS is adapted in a manner that the name of every textbox in the report layout starts with letters “txt”, without quotes.3. A set of predetermined rules140for creating a software module, which is a software component142, for calculating sales tax in accordance with a specific country's tax laws is adapted in a manner that a 0% sales tax is added wherever sales tax does not apply.

According to an aspect of an embodiment of the invention, sub-operation110aillustrates that the set of predetermined rules140has to be sufficient for constructing the software component142.

Given below are a few examples of a software component. The embodiments of the invention are not limited to these examples:1. A report layout is a software component142.2. A data entry form is a software component142.3. A message box is a software component142.4. An SQL query is a software component142.5. A lookup table is a software component142.6. A spreadsheet is a software component142.7. A video game is a software component142.8. A WHERE clause for an SQL query is a software component142.9. A software module which implements a business processing rule is a software component142.

According to an aspect of an embodiment of the invention, sub-operation110billustrates that the set of predetermined rules140is specified in terms of a source component144. According to an aspect of an embodiment of the invention, the set of predetermined rules140can be specified in terms of a plurality of source components144n.

Given below are a few examples of a source component. The embodiments of the invention are not limited to these examples:1. Paper size is a source component144of a report layout, which is a software component142.2. Background color is a source component144of a data entry form, which is a software component142.3. A command is a source component144of an SQL query, which is software component142.4. A whitespace is a source component144of a source code block, which is a software component142of a computer programming language.5. A width of a textbox is a source component144of a textbox object, which is a software component142.6. A tax rate is a source component144of a tax calculation business rule, which is a software component142.7. A mnemonic is a source component144of a source code block, which is a software component142, of an assembly language.

According to an aspect of an embodiment of the invention, sub-operation110cillustrates that the source component144is represented by a “component value146” in the software component142. According to an aspect of an embodiment of the invention, the source component144can be represented by a plurality of component values146n.

Given below are a few examples of a component value. The embodiments of the invention are not limited to these examples:1. A4, A3, Letter, and 8.5″×11″ are component values1461-4which may be utilized to represent a paper size, which is a source component144, of a report layout, which is a software component142.2. A long integer value is a component value146which is utilized to represent a background color, which is a source component144, of a data entry form, which is a software component142.3. SELECT, UPDATE, DELETE, INSERT INTO, CREATE DATABASE, and ALTER DATABASE are component values1461-6which may be utilized to represent a command, which is a source component144, of an SQL query, which is software component142.4. A space character and a tab character are component values1461-2which may be utilized to represent a whitespace, which is a source component144, of a source code block, which is a software component142, of a computer programming language.5. A positive integer value is a component value146which is utilized to represent the width of a textbox, which is a source component144, of a textbox object, which is a software component142.6. A numeric value is a component value146which is utilized to represent a tax rate, which is a source component144, of a tax calculation business rule, which is a software component142.7. MOV, XOR, and CMP are component values1461-3which may be utilized to represent a mnemonic, which is a source component144, of a source code block, which is a software component142, of an assembly language.

According to an aspect of an embodiment of the invention, at operation112the source component144is categorized into:1. an “indeterminable source component148”, and/or2. a “determinable source component150”

According to an aspect of an embodiment of the invention, the indeterminable source component148is represented by a component value146which either:1. cannot be generated and/or determined by utilizing an algorithm and/or a computer implementable logic for the purpose of being utilized in constructing the software component142, or2. can be generated and/or determined by utilizing an algorithm and/or a computer implementable logic for the purpose of being utilized in constructing the software component142, but is desired not to be generated for the purpose of being utilized in constructing the software component142.

According to an aspect of an embodiment of the invention, a source component144may be categorized into an indeterminable source component148or a determinable source component150on the basis of the desire of a user.

In other words, categorization of a source component144may also be done on the basis of the desire of a user. By way of an example, and not a limitation, paper size, which is a source component144, for a report, which is a software component142, may be categorized as an indeterminable source component148or as a determinable source component150, depending on the desire of a user. If a user always wants to print a report on a specific size of paper then paper size will be categorized as a determinable source component150, otherwise paper size will be categorized as an indeterminable source component148.

According to an aspect of an embodiment of the invention, a component value146, representing an indeterminable source component148, is determined by one or more of the following:1. utilizing a data token152,2. utilizing a parameter160,3. retrieving from a source object166, or4. any combinations thereof.

Given below are a few examples of an indeterminable source component. The embodiments of the invention are not limited to these examples:1. A column name is an indeterminable source component148in an SQL query, which is a software component142.2. A date is an indeterminable source component148in a WHERE clause, which is a software component142, of an SQL query, which is also a software component142.3. A report title is an indeterminable source component148in a report layout, which is a software component142.4. A whitespace may be categorized as a indeterminable source component148in a block of source code, which is a software component142, of JAVA programming language, because the whitespace, which is categorized as a indeterminable source component148, can be represented by either a tab character or a space character, which are component values1461-2respectively, and it is desired that the whitespace should not be determined by utilizing a computer implementable logic.5. A command may be categorized as an indeterminable source component148in an SQL query, which is a software component142, because the command, which is categorized as a indeterminable source component148, can be represented by SELECT, UPDATE, DELETE, INSERT INTO, CREATE DATABASE, and ALTER DATABASE, which are component values1461-6respectively. Therefore, it is not possible to determine a component value146for the command, which is categorized as an indeterminable source component148, by utilizing a computer implementable logic without some kind of implicit and/or explicit information about the SQL query, which is a software component142.

According to an aspect of an embodiment of the invention, a source component144that is not an indeterminable source component148, can be a determinable source component150.

Given below are a few examples of a determinable source component. The embodiments of the invention are not limited to these examples:1. A command may be categorized as a determinable source component150in a SELECT query, which is a software component142, because the command, which is categorized as a determinable source component150, can only be represented by “SELECT”, which is a component value146.2. A whitespace may be categorized as a determinable source component150in a block of source code, which is a software component142, of JAVA programming language, because the whitespace, which is categorized as a determinable source component150, may be represented by a tab character, which is a component value146.3. A page number may be categorized as a determinable source component150in a report layout which is a software component142, because the page number, which is categorized as a determinable source component150, can be represented by a value, which is a component value146, which can be determined by utilizing a computer implementable logic.

According to an aspect of an embodiment of the invention, at operation114, a “data token152” is defined, wherein the data token152is desired to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, a data token152is to be defined for a source component144whose component value is to be determined at runtime for constructing a software component142and such value cannot be determined by utilizing a computer implementable logic and/or a parameter160. In other words a data token152is utilized by a software component constructor170for determining:1. a component value146, which is to be utilized for constructing a software component142,2. a manner in which a component value146is to be utilized for constructing a software component142,3. a manner in which a software component142is constructed, or4. any combinations thereof.

According to an aspect of an embodiment of the invention, a data token152is to be defined for:1. determining a component value146, of an indeterminable source component148and/or a determinable source component150, which is desired to be determined at runtime for constructing a software component142but cannot be determined by utilizing a computer implementable logic and/or a parameter160,2. determining a manner in which a component value146is utilized for constructing a software component142, wherein such manner is desired to be determined at runtime but cannot be determined by utilizing a computer implementable logic and/or a parameter160, or3. any combinations thereof.

In other words, a data token152has to be defined for determining, at runtime, a component value146and/or a manner in which a software component142is to be constructed, wherein it is desired to determine, at runtime, a component value146and/or a manner in which a software component142is to be constructed, and wherein such determination cannot be made by utilizing a computer implementable logic and/or a parameter160for constructing software component142.

According to an aspect of an embodiment of the invention, a data token152is defined to automate construction of a software component at runtime by utilizing a computer implementable logic.

According to an aspect of an embodiment of the invention, association of a token value154with a component value146enables a software component constructor170to determine a place where a specific type of computer implemented logic needs to be applied. In other words, association of a token value154with a component value146enables a software component constructor170to act like a human software developer.

In other words, a data token152is defined to enable a machine (computer) to a perform a task, during construction of a software component142at runtime, which normally requires human intelligence but can be performed by utilizing a computer implementable logic if a machine can determine what, when, and where a task has to be performed. A data token152, represented by a token value154, enables a machine to determine what, when, and where a task has to be performed.

According to an aspect of an embodiment of the invention, a data token152is created along with a set of data token rules158that specifies a manner in which a token value154can be created, a manner in which a token value154can be associated to a component value146, and a manner in which a token value154can be processed, wherein processing of a token value154produces a token result156, wherein the token result156is utilizable for constructing a software component142.

According to an aspect of an embodiment of the invention, a token value154is retrieved by utilizing a parameter value162.

According to an aspect of an embodiment of the invention, a token value154is utilized without being processed.

According to an aspect of an embodiment of the invention, a token value154is processed by utilizing a parameter value162.

According to an aspect of an embodiment of the invention, a token value154is utilized without processing for constructing a software component142.

According to an aspect of an embodiment of the invention, processing of a token value154comprises executing a set of instructions which are executable by a processor.

According to an aspect of an embodiment of the invention, a token value154is embedded in a component value146.

According to an aspect of an embodiment of the invention, a token value154is implicitly (virtually) associated with a component value146.

According to an aspect of an embodiment of the invention, a component value146is retrieved by utilizing a token value154.

According to an aspect of an embodiment of the invention, a component value146is retrieved by utilizing a parameter value162.

According to an aspect of an embodiment of the invention, sub-operation114aillustrates that a data token152is represented by a token value154.

According to an aspect of an embodiment of the invention, sub-operation114billustrates that a “token result156” may be obtained by processing a token value154, wherein the token value154is processed by utilizing a “parameter”160.

According to an aspect of an embodiment of the invention, sub-operation114cillustrates that the data token152comprises a “set of data token rules158”, wherein the set of data token rules158is defined along with the data token152. According to an aspect of an embodiment of the invention, the set of data token rules158comprises one or more rules which specify one or more manners in which the data token152is desired to be utilized for constructing the software component142. According to an aspect of an embodiment of the invention, the set of data token rules158specifies one or more manners in which the data token152is:1. represented by a token value154.2. implicitly and/or explicitly associated, by way of a token value154, with a component value146.3. utilized for constructing a software component142.4. processed for obtaining a token result156and then a token result156is utilized for constructing a software component142.

A token value154may be associated with a component value146implicitly, wherein implicit association is implemented in a software component constructor170. By way of an example, and not a limitation, a software component constructor170may assume that a token value154is associated with each component value146of a source component144. As another example a software component constructor170may assume that a token value154is associated with a specific type of component values146nof a source component144.

A token value154may be associated with a component value146explicitly, wherein a token value154is explicitly associated with a component value146of a source component144. Explicit association can be done in a source object166and/or in a software component constructor170.

The data token152is utilized to automate tasks, in constructing the software component142, which are normally performed by a human being.

The data token152can be utilized to automate all tasks which are required for constructing the software component142, and which can be performed on the basis of an algorithm and/or a computer implementable logic.

According to an aspect of an embodiment of the invention, a token value154of a data token152may be determined by utilizing a parameter value162of a parameter160.

Given below are a few examples of how data tokens may be utilized. The embodiments of the invention are not limited to these examples:1. For creating a component value146for constructing a software component142.2. For changing a component value146for constructing a software component142.3. For determining an appropriate component value146for constructing a software component142.4. For determining an appropriate component value146for a source component144.5. For retrieving a component value146for constructing a software component142.6. For determining an order of a plurality of component values146nfor constructing a software component142.7. For reusing a component value146for constructing a software component142.8. For reusing a plurality of component values146nfor constructing a software component142.9. For changing a manner in which a software component142is to be constructed.

A data token152can also be utilized in numerous other ways to automate any part of constructing a software component142which can be automated on the basis of an algorithm and/or a computer implementable logic.

A data token152can also be utilized for invoking any desired process and/or a task. By way of an example, and not a limitation, upon processing a token value154of a data token152, a network connection may be established, a new program may be started, an existing program may be terminated, a component value146may be resolved from a database table, a user input may be acquired, an interaction with a user may be invoked, one or more software components142nmay be constructed, a machine may be started, a machine may be stopped, and the like.

A data token152can also be utilized for invoking a process on a hardware component and/or in a software component; such components may include, but are not limited to, a remote computer, a local computer, a server, a networked computer, a software process, a storage device, a cellular device, a communication device, a PLC (Programmable Logic Controller), and a hardware connected to a computer.

According to an aspect of an embodiment of the invention, at operation116, one or more parameters160nare defined.

According to an aspect of an embodiment of the invention, a parameter160is defined for enabling a user to define a component value146and/or a token value154at runtime. In other words, a parameter160enables a user to control the construction of a software component142at runtime.

A parameter160, represented by a parameter value162, is utilized to enable a user to interact with and/or direct/control the process of constructing a software component142, according to the desire and/or requirement of the user, via input of component values146nand/or token values154nin the form parameter of values162n. In other words, a component value146, and/or a token value154may be determined at runtime by a parameter value162, wherein a parameter value is an input by a user, at runtime.

According to an aspect of an embodiment of the invention, a parameter160may be utilized by a software component constructor170for constructing a software component142, wherein the software component constructor170determines a manner in which a software component142is constructed on the basis of a parameter160.

According to an aspect of an embodiment of the invention, a parameter160is defined for determining a source object166which is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, sub-operation116aillustrates that a parameter160is represented by a “parameter value162” which is specified and/or input by a user, wherein a parameter value162is a data value. The parameter160may also be defined with a default parameter value162.

The parameter value162can be specified and/or input by a user either each time the parameter160is utilized or only at a time when the user wants to change the parameter value162which the user has already specified; in the latter case, the parameter value162may:1. have to be specified for the first time by a user, and/or2. be stored in a computer readable recording medium and utilized, whenever required, by retrieving from the computer readable recording medium.

According to an aspect of an embodiment of the invention, a parameter160may also be defined for determining a component value146of an indeterminable source component148.

Given below are two examples of utilizing a parameter. These examples are neither exhaustive nor complete. Moreover, the invention is not, in any way, dependent on, or restricted by the following examples:1. For constructing a report layout, which is a software component142, which comprises a plurality of report columns, a parameter160may be utilized to enable a user to specify desired report columns along with their order.2. For constructing an SQL query, which is a software component142, a parameter160may be utilized to enable a user to specify a target platform for the SQL query, wherein the target platform is either ORACLE or MICROSOFT SQL Server.3. For constructing a report layout, which is a software component142, a parameter160is defined for determining a value for a paper size, wherein the paper size is an indeterminable source component148.

A user can specify a parameter value162by utilizing one or more methods, which may include, but are not limited to, a data entry via a keyboard, a touch screen, a voice command, a gesture, a blink of an eye, an eye scan, an analog signal converted into a digital signal, and by way of human identification, such as, finger print detection, eye detection, face detection, DNA identification, and the like.

According to an aspect of an embodiment of the invention, at operation118, a data model164is created, wherein the data model164is suitable and is sufficient for creating a “source object repository168”, wherein the source object repository168is suitable and sufficient for:1. Compulsorily:a. Storing a “source object166”, wherein the source object166is sufficient for comprising one or more component values146nrepresenting one or more indeterminable source components148n.b. Identifying, resolving, and retrieving the source object166.2. Optionally, if desired:a. Storing a plurality of source objects166n.b. Identifying, resolving, and retrieving a source object166out of the plurality of source objects166n. In such a case, the source object repository168should also provide a mechanism which enables an identification of a source object166out of the plurality of source objects166n.c. Implementing and maintaining, in a desired manner, a desired hierarchy and/or a desired relationship between a plurality of source components144n, wherein both the desired hierarchy and/or the desired relationship are determined on the basis of:i. the set of predetermined rules140, and/orii. a role and/or a purpose of the component value146in a software component142.d. Implementing and maintaining a desired order among a plurality of component values146n.e. Utilizing a source object166, out of a plurality of source objects166nand/or a desired part thereof, in another source object166, out of the plurality of source objects166n.f. Associating, in accordance with the set of data token rules158, a token value154with a component value146and/or with another token value154that is comprised by a source object repository168. A token value154may be associated by one or more of the following:i. embedding in a component value146,ii. embedding in a source object166,iii. associating, implicitly, with a component value146stored in the source object repository168,iv. associating with a component value146, stored in a source object repository168, by utilizing a reference value, wherein the reference value is a data value, orv. any combinations thereof, org. Any combinations thereof.

According to an aspect of an embodiment of the invention, the data model164comprises one or more attributes (which may also be called fields or columns) for storing component values146nfor all indeterminable source components148n′for which neither a data token152is defined, nor a parameter160is defined.

Sub-operation118aspecifies that the data model164, created at operation118, is sufficient for storing a source object166.

According to an aspect of an embodiment of the invention, the source object repository168is created, at operation120, in a desired manner and on the basis of a data model164. According to an aspect of an embodiment of the invention, the source object repository168is created by utilizing one or more of the following:1. structured data,2. semi-structured data, and3. any combinations thereof.

According to an aspect of an embodiment of the invention, a source object repository168may be created by utilizing any suitable data structure which may include, but is not limited to, a database table, a comma separated text file, a spreadsheet, a matrix, an object, an array, a set of variables, and a linked list.

According to an aspect of an embodiment of the invention, a source object repository168is sufficient for storing a source object166, wherein a source object166comprises an indeterminable source component148represented by a component value146, wherein the indeterminable source component148is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, a source object repository168enables identification of a component value146in the source object repository168with reference to the source object166and an indeterminable source component148which is represented by the component value146.

According to an aspect of an embodiment of the invention, a source object repository168comprises a token value154which can:1. be associated with a component value146,2. refer to a component value146which is stored in the same source object166in which token value154is stored,3. refer to a component value146which is stored in another source object166, or4. any combinations thereof.

According to an aspect of an embodiment of the invention, a source object repository168comprises a plurality of source components144nin a desired hierarchy.

According to an aspect of an embodiment of the invention, a source object repository168comprises a plurality of component values146nin a desired order.

According to an aspect of an embodiment of the invention, a source object166stored in a source object repository168is uniquely identifiable.

According to an aspect of an embodiment of the invention, at operation122, a “software component constructor170” is created, wherein the software component constructor170is a computer program which is sufficient for constructing a software component142on the basis of a set of predetermined rules140and by utilizing one or more of the following:1. a component value146representing a source component144,2. a parameter value162of a parameter160,3. a token value154that represents a data token152, and4. any combinations thereof.

According to an aspect of an embodiment of the invention, a software component constructor170utilizes a data model164of a source object166by way of a source object repository168for retrieving the source object166.

According to an aspect of an embodiment of the invention, the software component constructor170comprises and implements the set of predetermined rules140of a software component142.

According to an aspect of an embodiment of the invention, a set of predetermined rules140may also be adapted in a desired manner for creating a software component constructor170to the extent that a software component142can be constructed by utilizing the adapted set of predetermined rules140.

According to an aspect of an embodiment of the invention, a set of predetermined rules140can be adapted, as may be desired and/or required, for constructing a software component constructor170, wherein the adaptation is done in a manner that no rule of the set of predetermined rules140is violated to the extent that a software component142cannot be constructed on the basis of the adapted set of predetermined rules. According to an aspect of an embodiment of the invention, a set of predetermined rules140has to be sufficient for enabling a software component constructor170to construct a software component142on the basis of set of predetermined rules140and by utilizing one or more of the following:1. a component value146,2. a token value154, and3. any combinations thereof.

According to an aspect of an embodiment of the invention, a software component constructor170utilizes a data token152during construction of a software component142, wherein a software component constructor170utilizes, at runtime, a data token152for determining:1. a component value146,2. a manner in which a component value146is utilized for constructing a software component142,3. a manner in which a software component142is constructed, or4. any combinations thereof.

In other words, a software component constructor170utilizes a data token152to work like a human developer for constructing a software component142.

By way of an example, and not a limitation, a software component constructor170can be utilized for constructing a database query, a report layout, a data entry form, a menu, and/or a customized inventory processing rule. The software component constructor170can also be integrated with a computer program for constructing, at runtime, as many software components as may be desired. The integration of software component constructor170can be done by either utilizing an API (Application Programming Interface) or directly incorporating software component constructor170in a computer program with which the integration of software component constructor170is desired.

According to an aspect of an embodiment of the invention, a software component constructor170constructs a software component142at runtime according to the desire, specified by way of a parameter160, of a user. In other words, a layer of a computer program, which receives one or more parameters160nfrom a user, may be integrated with a software component constructor170, wherein the software component constructor170constructs one or more software components in response to the input parameters160n.

According to an aspect of an embodiment of the invention, a software component constructor170may construct a plurality of software components142nby utilizing a source object166, a data token152, and a parameter160. In other words, a parameter160and a data token152enable a software component constructor to construct more than one software components142nfrom a source object166.

According to an aspect of an embodiment of the invention, three sub-operations122a,122band122care connected to the operation122. Each of the sub-operations122a,122band122cillustrates creation of a module, which is a computer program, wherein the module may be required for constructing a software component142. Each of the modules created in sub-operations122a,122band122ccan be either:1. an independent computer program which is linked and/or integrated with the software component constructor170, or2. a computer program which is an integral part of the software component constructor170, or3. a computer program which is linked with the software component constructor170via a network, such as a LAN (Local Area Network), a MAN (Metropolitan Area Network), a WAN (Wide Area Network), a PAN (Personal Area Network), a SAN (Storage Area Network), a CAN (Campus Area Network), and a VPN (Virtual Private Network), and the like, or4. any combinations of the above.

According to an aspect of an embodiment of the invention, at sub-operation122a, a “parameter value resolution module170a” is created. The parameter value resolution module170ais utilized for resolving a parameter value162. A parameter value162may be resolved by utilizing many different methods, which may include, but are not limited to:1. a user input via one or more of several ways, which may include, but are not limited to:a. an input device,b. a gesture,c. a voice command,d. a biometric input,e. an eye scan,f. face recognition,g. a thought which can be interpreted by a computer,h. an analog signal converted into a digital signal,i. DNA identification, andj. any combinations thereof.2. reading from a computer readable medium, and3. any combinations thereof.

According to an aspect of an embodiment of the invention, the parameter value resolution module170amay also resolve the parameter value162from a computer readable recording medium and/or by utilizing an algorithm and/or a computer executable logic.

According to an aspect of an embodiment of the invention, at sub-operation122b, a “data token processing module170b” is created. The data token processing module170bis utilized for processing a token value154. The data token processing module170bprocesses the token value154on the basis of the set of data token rules158.

According to an aspect of an embodiment of the invention, at sub-operation122c, a “source object resolution module170c” is created. The source object resolution module170cis utilized for identifying a source object166and then resolving a component value146from the source object166.

The source object166can be identified in many ways, which may include, but are not limited to, a utilization of a parameter value162, a utilization of an algorithm and/or a computer implementable logic, a utilization of a token value154, and/or any combinations thereof.

According to an aspect of an embodiment of the invention, while resolving a component value146from a source object166, the source object resolution module170cmay also utilize a parameter value162which is resolved by a parameter value resolution module170a, and/or may utilize a token value154which is processed by a data token processing module170b.

According to an aspect of an embodiment of the invention, while resolving a component value1461from a source object1661, a source object resolution module170cmay also resolve another component value1462from another source object1662, wherein the source object1662is referenced in the source object1661.

According to an aspect of an embodiment of the invention, while resolving the component value146from a source object166, the source object resolution module170cmay also resolve a plurality of component values146nfrom a plurality of source objects166n, wherein the plurality of source objects166nare referenced in the source object166.

According to an aspect of an embodiment of the invention, while resolving the component value146from a source object166, the source object resolution module170cmay also change, drop, and/or add a component value146on the basis of utilizing a token value154.

According to an aspect of an embodiment of the invention, at operation124, a source object166is created, wherein the source object166is sufficient for constructing a software component142, and wherein the source object166is to be utilized for constructing the software component142. The creation of the source object166may also include creation and association of a token value154, to a component value146and/or another token value154, of a data token152on the basis of a set of data token rules158. According to an aspect of an embodiment of the invention, the source object166is stored in a source object repository168.

According to an aspect of an embodiment of the invention, at operation124, a token value154, representing a data token152, may be created and associated with a component value146representing a source component144comprised by a source object166.

According to an aspect of an embodiment of the invention, a source object166is created, wherein a source object166comprises a component value146which represents an indeterminable source component148, and wherein the component value146is utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, a source object166is created in a manner that a token value154can be associated with a component value146in a manner that the token value154can be utilized and or processed.

According to an aspect of an embodiment of the invention, utilization of a token value154determines a manner in which a component value146is utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token value154determines that a component value146is not to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token value154determines that a component value146is to be processed, and then the processed component value is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token value154determines that a component value146is to be modified, and then the modified component value146is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token value154determines that a component value146is to be changed, and then the changed component value146is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token value154determines that a component value146is to be utilized for creating another component value146, and then another created component value146is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, a token value154is embedded in a component value146.

According to an aspect of an embodiment of the invention, a token value154is embedded in a source object166.

According to an aspect of an embodiment of the invention, a source object166comprises a component value146which is not comprised in a software component142.

According to an aspect of an embodiment of the invention, a source object166comprises a component value146, which is not comprised in a software component142, is determined by utilizing:1. a token value154,2. a token result156,3. a parameter value162,4. a software component constructor170, or5. any combinations thereof.

According to an aspect of an embodiment of the invention, utilization of a token result156determines a manner in which a component value146is utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token result156determines that a component value146is not to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token result156determines that a component value146is to be processed, and then the processed component value is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token result156determines that a component value146is to be modified, and then the modified component value146is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token result156determines that a component value146is to be changed, and then the changed component value146is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, utilization of a token result156determines that a component value146is to be utilized for creating another component value146, and then another created component value146is to be utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, at operation126, a software component142is constructed by utilizing a software component constructor170. An exemplary construction of the software component142is explained in greater detail inFIG. 2.

According to an aspect of an embodiment of the invention, following steps are performed by a software component constructor170for constructing a software component142:1. Accepts a parameter value162from a user.2. Identifies a source object166.3. Retrieves a source object166from a source object repository168.4. Retrieves a component value146of an indeterminable source component148from the retrieved source object166.5. Processes a token value154to obtain a token result156.6. Constructs a software component142on the basis of a set of predetermined rules140, of the software component142, and by utilizing the parameter value162, the component value146of the indeterminable source component148, a component value146of a determinable source component150, and a token result156.

According to an aspect of an embodiment of the invention, a token value154is not processed for constructing a software component142. In other words, a token value154may be utilized without being processed for constructing a software component142.

According to an aspect of an embodiment of the invention, a parameter value162is not utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, a parameter value162is utilized for processing a token value154.

According to an aspect of an embodiment of the invention, a component value146of a determinable source component150is not utilized for constructing a software component142.

According to an aspect of an embodiment of the invention, a component value146of an indeterminable source component148is not utilized for constructing a software component142.

At operation128, it is decided whether another source object166is required or not. If another source object166is required, then the flow continues to operation124. Otherwise, the flow moves to operation130.

Creation of another source object166will be required whenever existing source objects166nare not sufficient for constructing a desired software component142.

At operation130, it is decided whether another software component142is to be constructed or not. If another software component142is to be constructed, then the flow continues to operation126. Otherwise, the flow moves to terminal132.

At terminal132, this flowchart ends.

A terminal134is utilized as another starting point to illustrate that the source object166, the software component constructor170, and the source object repository168may be utilized as many times as desired.

9. An Embodiment According to an Aspect of the Invention (FIG.2)

FIG. 2illustrates an exemplary flowchart of an exemplary working of software component constructor170created at operation122inFIG. 1B. This flowchart illustrates only one mode of implementation of software component constructor170in accordance with an aspect of an embodiment of the invention. Any person who is skilled in the art can construct software component constructor170in many different manners. In other words,FIG. 2explains operation126in greater detail.

At terminal212, software component constructor170starts.

According to an aspect of an embodiment of the invention, at operation214, the parameter value resolution module170aresolves one or more parameter values162nwherein the parameter values162nare required for constructing one or more desired software components142n.

According to an aspect of an embodiment of the invention, at operation216, source objects166nare identified by the source object resolution module170c, wherein the source objects166nare required to be utilized for constructing the desired software components142n.

According to an aspect of an embodiment of the invention, at operation218, component values146nare resolved by the source object resolution module170cfrom the source objects166n. According to an aspect of an embodiment of the invention, the source object resolution module170cmay also utilize, for resolving the component values146n, one or more of the following:1. one or more parameter values162n,2. one or more token values154n, wherein one or more token values154nmay be processed by the data token processing module170b, and3. any combinations thereof.

At operation220, the software component constructor170constructs the desired software components142non the basis of sets of predetermined rules140n, and by utilizing one or more of the following:1. The parameter values162n.2. The token values154n, wherein the token values154nmay be processed by the data token processing module170b.3. The resolved component values146n, and4. Any combinations thereof.

At terminal224, the construction of the desired software components142nends.

10. An Exemplary Environment for Carrying Out an Aspect of an Embodiment of the Invention

FIG. 3illustrates an exemplary block diagram of an exemplary computing system environment300which is suitable for an implementation of an aspect of an embodiment of the invention. Computing system environment300includes an exemplary computer302, an exemplary display unit330, an exemplary printer332, an exemplary speaker334, an exemplary keyboard336, an exemplary pointing device338, an exemplary microphone340, an exemplary digitizer342, and an exemplary expansion card344. Computer302is connected to an exemplary remote computer(s)354so as to work in a networked environment, wherein remote computer(s)354is connected to computer302via an exemplary communication link350. Moreover, an exemplary network auxiliary storage352is connected to computer302via communication link350, and an exemplary remote auxiliary storage356is connected to computer302via remote computer(s)354. Communication link350is connected to computer302via an exemplary communication interface326.

Computing system environment300inFIG. 3illustrates only one example of an exemplary environment in which an embodiment of the invention can be implemented, but does not suggest any limitation as to the scope of use and/or functionality of the invention. Moreover, the invention is neither dependent, nor restricted, in any way, on computing system environment300inclusive of all the exemplary components incorporated therein. Additionally, computing system environment300should not be interpreted as having any dependency on any one and/or any combinations of the components illustrated in computing system environment300. Furthermore, computing system environment300is not limited to the illustrated components; the number of components may be more or less in other configurations and/or environments.

In addition to computing system environment300, the embodiments of the invention can be implemented under any other general and/or special purpose computing system environment and/or configuration. By way of an example, and not a limitation, some of the well-known computing environments and/or configurations that can utilize the invention may include, but are not limited to, a personal computer, a server computer, a hand-held computer, a laptop computer, a tablet device, a portable communication device, a cellular phone, a multiprocessor based system, a workstation, a programmable consumer electronic, a set top box, a game console, a network personal computer, a minicomputer, a mainframe computer, a super computer, a distributed computing environment that may include any of the above mentioned systems, a process control computer, a flight computer, a GPS device, a media player, and a computer that control automobiles.

The components illustrated in computer302include an exemplary processor304, an exemplary bus306, an exemplary computer memory308, an exemplary ROM310(Read Only Memory), an exemplary BIOS312(Basic Input Output System), an exemplary RAM314(Random Access Memory), an exemplary auxiliary storage interface316, an exemplary auxiliary storage318, an exemplary video controller320, an exemplary input/output interface unit(s)322, an exemplary expansion interface324, and communication interface326.

Processor304, which may be utilized in a plurality, is connected to bus306. Processor304may include, but is not limited to, a microprocessor, a RISC (Reduced Instruction Set Computer) processor, and a CISC (Complex Instruction Set Computer) processor.

Bus306, which connects one or more components to processor304for facilitating data exchange between processor304and the connected one or more components, may comprise one or more of the following:1. a system bus,2. a peripheral bus, and/or3. any combinations thereof.

The system bus is also known as a local bus, a processor bus or an FSB (Front-Side Bus). The system bus may further comprise an address bus, a memory bus, a data bus, a Northbridge, an MCH (Memory Controller Hub), and the like. The peripheral bus is also known as an I/O bus.

Bus306may include, but is not limited to, an ISA (Industry Standard Architecture) bus, an EISA (Extended Industry Standard Architecture) bus, an MCA (Micro Channel Architecture) bus, a VESA (Video Electronics Standard Association) bus, a VLB (VESA Local Bus), a PCI (Peripheral Component Interconnect) bus, a Multibus, a Unibus, a FireWire bus, an SCSI (Small Computer System Interface) bus, a RS-232 bus, an ATA (Advanced Technology Attachment) bus, a SATA (Serial Advanced Technology Attachment) bus, a PATA (Parallel Advanced Technology Attachment) bus, a USB (Universal Serial Bus), a serial bus, a CardBus, a PCMCIA (Personal Computer Memory Card International Association) bus, an AGP (Accelerated Graphics Port) bus, an ExpressCard bus, a wishbone bus, a CAN (Controller Area Network) bus, a FlexRay bus, and an STD bus. Moreover, the invention will also work with any type and combination of bus topologies which may include, but are not limited to, a parallel, a serial, a daisy-chain, and a multi-drop.

Bus306may also provide for adding one or more input/output components to expansion interface324by utilizing expansion card344. Expansion interface324and expansion card344may support one or more bus types that are supported by bus306.

Expansion interface324may include, but is not limited to, an ISA (Industry Standard Architecture) interface, a PCI (Peripheral Component Interconnect) interface, a FireWire interface, a SCSI (Small Computer System Interface) interface, an RS-232 interface, an ATA (Advanced Technology Attachment) interface, a SATA (Serial Advanced Technology Attachment) interface, a PATA (Parallel Advanced Technology Attachment) interface, a USB (Universal Serial Bus) interface, a PCMCIA (Personal Computer Memory Card International Association) interface, an AGP (Accelerated Graphics Port) interface, and an ExpressCard interface.

Expansion card344may include, but is not limited to, a modem, a network card, a Bluetooth card, a USB interface card, a video card, a sound card, a PLC (Programmable Logic Controller) card, and a card that provides an interface to a special hardware.

Computer302typically requires a memory which is represented inFIG. 3as computer memory308. Computer memory308comprises ROM310and RAM314. However, computer memory308is not limited to ROM310and/or RAM314, and may include any other type and/or form of memory that may be accessed directly by processor304. Computer memory308is connected to bus306for storing information and instructions to be executed by processor304. Moreover, contents of computer memory308may also include contents that are being currently operated upon by processor304. For this purpose, bus306connects computer memory308to processor304.

For a start-up, computer302typically requires a set of start-up instructions, wherein the set of start-up instructions is stored in a non-volatile memory, which is represented by ROM310in theFIG. 3.

ROM310may include, but is not limited to, a ROM (Read Only Memory), also known as solid state ROM, a PROM (Programmable Read Only memory), an EPROM (Erasable Programmable Read Only Memory), and an EEPROM (Electronically Erasable Programmable Read Only Memory), also known as a flash memory.

ROM310typically stores BIOS312, wherein BIOS312comprises computer start-up routines and other basic routines that facilitate transfer of information between various components of computer302. ROM310may also store an operating system, a device driver, an application program, a data structure, other program modules, a static application data and the like.

Computer302also typically requires a volatile memory, which is represented by RAM314in theFIG. 3. RAM314is generally utilized for storing a computer program, and information/instructions to be executed by processor304. RAM314may also be utilized for storing temporary variables or other intermediate data during the execution of the instructions by processor304.

RAM314is available in many forms, which may include, but are not limited to, an SRAM (StaticRAM), a DRAM (Dynamic RAM), an SDRAM (Synchronous DRAM), a DDR SDRAM (Double Data Rate SDRAM), an ESDRAM (Enhanced SDRAM), an SLDRAM (Synchronous Link DRAM), and a DRDRAM (Direct Rambus DRAM).

In computer302, processor304can access the contents of ROM310and RAM314directly by utilizing bus306. Moreover, the contents of ROM310and RAM314may include contents that are being currently operated upon by processor304.

Auxiliary storage interface316facilitates connectivity between auxiliary storage318and computer302via bus306. Auxiliary storage318may also be connected to computer302through communication link350as network auxiliary storage352and/or through remote computer(s)354as remote auxiliary storage356. Auxiliary storage318provides storage for software and data which may include, but are not limited to, a computer readable instruction, a data structure, an operating system, a device driver, an application computer program, other program modules, a database, and an application data.

Auxiliary storage interface316may include, but is not limited to, one or more of a hard disk interface, a floppy disk interface, a SCSI (Small Computer Serial Interface) interface, an optical disc interface, a Blu-ray disc interface, a magneto-optical interface, a magnetic tape interface, a DAT (Digital Audio Tape) interface, a DASD (Direct Access Storage Device) interface, an ATA (Advanced Technology Attachment) interface, a SATA (Serial Advanced Technology Attachment) interface, a PATA (Parallel Advanced Technology Attachment) interface, and a USB (Universal Serial Bus) interface.

Auxiliary storage318may be one or more of a non-volatile non-removable media, a non-volatile removable media, an associated drive for a non-removable media and any combinations thereof.

Auxiliary storage318may include, but is not limited to, one or more or any combinations of a hard disk, a fixed disk, a Winchester disk drive, a floppy disk drive and a media, a CD-ROM (Compact Disc Read Only Memory) drive and a media, a CD-R (Compact Disc Recordable) drive and a media, a CD-RW (Compact Disc Re-Writeable) drive and a media, a DVD (Digital Versatile Disc) drive and a media, a Blu-ray drive and a media, an optical disc storage device and a media, a magneto-optical storage device and a media, a magnetic cassette drive and a media, a magnetic tape drive and a media, a paper tape reader and a paper tape, a paper card reader and a paper card, a DAT (Digital Audio Tape) drive and a media, a DASD (Direct Access Storage Device) device and a media, a removable hard disk, and a RAID (Redundant Array of Independent Disks) based hard disk.

Display unit330is typically connected to computer302through an interface which is video controller320in computing system environment300. Display unit330and video controller320may be used in a plurality.

Display unit330and video controller320may be of any type such as a CGA (Color Graphic Adapter), an EGA (Enhanced Graphics Adapter), a VGA (Video Graphics Array), an SVGA (Super Video Graphics Array), an XGA (eXtended Graphics Array), an SXGA (Super XGA), a QVGA (Quarter VGA), a WXGA (Widescreen XGA), an SXGA+, a WXGA+, a WSXGA, a WQVGA, an MDA, a Hercules, an MCGA (Multicolor Graphics Adapter), a UXGA, a WUXGA, a 2K (DLP Cinema Technology), a WQUXGA (Wide Quad Ultra eXtended Graphics Array), and the like.

Display unit330and video controller320may be connected to each other by utilizing a video interface standard, which may include, but is not limited to, VGA connector standard, DVI (Digital Visual Interface) standard, and HDMI (High-Definition Multimedia Interface) standard.

A touch screen panel (not shown in theFIG. 3) may also be attached to display unit330, wherein display unit330is utilized to display an output, and the touch screen is utilized as an input device.

Computing system environment300may include other output devices that may be connected to bus306through input/output interface unit(s)322.

Input/output interface unit(s)322may include, but is not limited to, one or more or any combinations of a PS/2 interface, a USB (Universal Serial Bus) interface, a parallel interface, a serial RS-232 interface, and an RS-762 interface.

In computing system environment300, the following six input/output devices have been illustrated:1. printer332,2. speaker334,3. keyboard336,4. pointing device338,5. microphone340and6. digitizer342.

However, such input/output devices may include, but are not limited to, a thermal printer, a dot matrix printer, an ink jet printer, a laser printer, a line printer, a plotter, a multifunction printer, a headphone, an earphone, a projector, a mouse, a track ball, a pointing stick, a touch pad, a digitizer, a scanner, a game pad, a joystick, a barcode reader, a game paddle, a webcam, a fingerprint scanner, a web cam, a USB hub, a port replicator, a camera, an access control device, a flash memory key, and a removable hard disk. Moreover, the input/output devices may be used in a plurality.

Computer302may also typically operate in a networked environment wherein computer302is connected to other computers, such as remote computer(s)354, by utilizing communication link350, wherein communication link350is established by utilizing communication interface326, wherein communication interface326is coupled with bus306.

Remote computer(s)354may include, but is not limited to, a computer similar to computer302, a personal computer, a laptop computer, a tablet computer, a notebook computer, a server, a router, a PDA (Personal Digital Assistant), a cellular phone, a network PC, a peer device, other common network nodes, a public network, a cellular network, a mainframe computer, and a minicomputer.

Computer302and remote computer(s)354may communicate with each other by utilizing one or more technologies which may include, but are not limited to, a web service, a CORBA (Common Object Request Broker Architecture), an RPC (Remote Procedure Call), a CBSE (Component Based Software Engineering), a REST (REpresentational State Transfer), and an email.

Communication interface326, which is coupled to bus306, provides a two-way data communication coupling via communication link350, wherein communication link350is utilized for connecting computer302with other components such as network auxiliary storage352, remote computer(s)354, and remote auxiliary storage356.

Communication interface326may include, but is not limited to, one or more or any combinations of a physical connection, a logical connection, a protocol, a modem, a cable modem, a DSL (Digital Subscriber Line) modem, an ADSL (Asymmetric Digital Subscriber Line) modem, a router, a frame relay connection, an AIN (Advanced Intelligent Network) connection, a synchronous optical connection, a DSL connection, a digital T1 line, a digital T2 line, a digital E1 line, a DDS (Digital Data Service) connection, an Ethernet connection, an ISDN (Integrated Services Digital Network) line, a dial-up port, such as, a V.90, a V.34, or a V.34 bis analog modem connection, an ATM (Asynchronous Transfer Mode) connection, an HSSI (High Speed Serial Interface), an FDDI (Fiber Distributed Data Interface), and a CDDI (Copper Distributed Data Interface).

Communication link350facilitates establishment of networks which may include, but are not limited to, a LAN (Local Area Network), a MAN (Metropolitan Area Network), a WAN (Wide Area Network), a PAN (Personal Area Network), a SAN (Storage Area Network), a CAN (Campus Area Network), and a VPN (Virtual Private Network).

Communication link350may include, or may access any one or more of, a WAP (Wireless Application Protocol) link, a GPRS (General Packet Radio Service) link, a GSM (Global System for Mobile Communication) link, a CDMA (Code Division Multiple Access) or a TDMA (Time Division Multiple Access) link, such as a cellular phone channel, a GPS (Global Positioning System) link, a CDPD (cellular digital packet data), a RIM (Research in Motion Limited) duplex paging type device, a Bluetooth radio link, an IEEE 802.11-based radio frequency link, a #G Link, an HSPA link, and the like.

Communication link350may further include, or may access any one or more of, an RS-232 serial connection, an IEEE-1394 (Fiber wire) connection, an IrDA (infrared) port, a SCSI (Small Computer Serial Interface) connection, a USB (Universal Serial Bus) connection, and any other interface or connection, wired or wireless, digital or analog. The interfaces may include, but are not limited to, Ethernet interfaces, frame relay interfaces, cable interfaces, DSL interfaces, and token ring interfaces. Moreover, various very high-speed interfaces may be utilized; for example, fast Ethernet interfaces, Gigabit Ethernet interfaces, ATM interfaces, POS (Point Of Sale) interfaces, FDDI (Fiber Distributed Data Interface), and the like. An interface may include an appropriate port for a communication with an appropriate media.

Communication link350may be deployed by utilizing one or more topologies, which may include, but are not limited to, a bus topology, a star topology, a ring topology, a mesh topology, a star-bus topology, and a tree or a hierarchical topology.

Communication link350may utilize one or more protocols for communication which may include, but are not limited to, a IP (Internet Protocol), an IPv4, an IPv6, an ICMP (Internet Control Message Protocol), an IGMP (Internet Group Management Protocol), an IPsec (Internet Protocol Security), a TCP (Transmission Control Protocol), a UDP (User Datagram Protocol), an HTTP (Hypertext Transfer Protocol), an FTP (File Transfer Protocol), a Telnet, an IRC (Internet Relay Chat), a DSL (Digital Subscriber Line), and an ISDN (Integrated Service Digital Network).

Remote computer(s)354and communication link350may be used in a plurality and/or in any combinations thereof, simultaneously or separately. More particularly, programming or configuring or causing an apparatus or device, for example, a computer, to execute the described functions of embodiments of the invention creates a new machine where in case of a computer, a general purpose computer, in effect becomes a special purpose computer once it is programmed or configured or caused to perform particular functions of the embodiments of the invention pursuant to instructions from program software. As discussed, a program/software implementing the embodiments may be recorded on a computer-readable media, e.g., a non-transitory or persistent computer-readable medium.

11. An Exemplary Mode for Carrying Out Certain Aspects of a Few Embodiments of the Invention (FIG.4A to10Z)

FIGS. 4A to 10Zillustrate detailed steps which are required, according to an aspect of an embodiment of the invention, for constructing desired exemplary SQL queries, which are software components142n, for MICROSOFT ACCESS and/or ORACLE databases. These steps include:1. Creating a source object repository168(an example of operation20illustrated inFIG. 1A), illustrated inFIGS. 4A to 7C. Creation of a source object repository168is further explained in detail as follows:a. Selecting one or more sets of predetermined rules140n(an example of operation110illustrated inFIG. 1B), illustrated inFIGS. 4A to 4R.b. Categorizing source components144nin to indeterminable source components148nand determinable source components150n(an example of operation112illustrated inFIG. 1B), illustrated inFIGS. 4S and 4T.c. Defining data tokens152n(an example of operation114illustrated inFIG. 1B) along with their respective sets of data token rules158n, illustrated inFIGS. 5A to 5C.d. Defining parameters160n(an example of operation116illustrated inFIG. 1B), illustrated inFIG. 6.e. Creating a data model164(an example of operation118illustrated inFIG. 1B), illustrated inFIGS. 7A to 7B.f. Creating a source object repository168(an example of operation120illustrated inFIG. 1B), illustrated inFIG. 7C.2. Creating a software component constructor170(an example of operation30illustrated inFIG. 1A), illustrated inFIGS. 8A to 8X.3. Constructing one or more software components142n(an example of operation40illustrated inFIG. 1A), illustrated inFIGS. 9A to 10Z.a. Creating source objects166n(an example of operation124illustrated inFIG. 1B), illustrated inFIGS. 9A to 9O.b. Constructing software components142n(an example of operation126illustrated inFIG. 1B), illustrated inFIGS. 10A to 10Z.

FIGS. 4A to 10Zillustrate an exemplary implementation of a few exemplary embodiments according to some aspects of the invention. However, those familiar with the art to which the present invention relates will recognize various alternative designs, embodiments and implementations for practicing these aspects of the invention, as disclosed in the attached claims.

The term “desired query”, wherever used in the detailed description ofFIGS. 4A to 10Z, is intended to refer to one or more queries, an example of software component142, which is to be constructed by utilizing the embodiments illustrated inFIGS. 4A to 9O.

The term “queryBuilder”, wherever used in the description ofFIGS. 4A to 10Z, is intended to refer to an example of the software component constructor170. queryBuilder is an exemplary embodiment developed in accordance with certain principles of the invention and is illustrated inFIGS. 8A to 8P. However, the invention is not, in any way, dependent on or restricted by queryBuilder.

The syntax diagrams, of the exemplary sets of predetermined rules, illustrated inFIGS. 4B to 4R, are adapted for exemplary implementations of a few exemplary embodiments according to some aspects of the invention. However, all such adaptations are made in such a manner that no respective sets of predetermined rules are violated to an extent that a legitimate query cannot be constructed on the basis of the adapted sets of predetermined rules.

The embodiments illustrated inFIGS. 4A to 9Odo not include any error checking and/or exception handling; it is assumed that all the embodiments are utilized correctly.

The embodiments illustrated inFIGS. 4A to 9Oare collectively sufficient, and are collectively utilized for constructing one or more desired queries at runtime, wherein each of the one or more desired queries can be constructed either for:1. MICROSOFT ACCESS, or2. ORACLE, or3. both MICROSOFT ACCESS and ORACLE.

FIG. 4Aillustrates two exemplary sets of predetermined rules400, selected according to an aspect of an embodiment of the invention, wherein the two exemplary sets of predetermined rules400include a set of predetermined rules for ACCESS SELECT query401, which is an example of the set of predetermined rules140, and a set of predetermined rules for ORACLE SELECT query402, which is also an example of the set of predetermined rules140.

The set of predetermined rules for ACCESS SELECT query401comprises only those predetermined rules which are required and sufficient for generating the desired queries for MICROSOFT ACCESS. MICROSOFT ACCESS may comprise additional predetermined rules, which are not selected in this example.

The set of predetermined rules for ORACLE SELECT query402comprises only those predetermined rules which are required and sufficient for generating the desired queries for ORACLE. ORACLE may comprise additional predetermined rules, which are not selected in this embodiment.

FIGS. 4B to 4Killustrate the set of predetermined rules for ACCESS SELECT query401in greater detail by utilizing a set of syntax diagrams. Each syntax diagram has an entry-point and an end-point, and describes possible paths between the two points by going through other non-terminals, terminals, and/or decision boxes. The terminals are represented by round corner boxes, the non-terminals are represented by square corner boxes, and the decision boxes are represented by diamond shaped boxes.

A circle, such as410a,410b,411a, and the like, represents an entry point and an end point in a syntax diagram.

A terminal, a rectangle with round corners, is something that is written literally, such as “SELECT” (without quotes), whereas a non-terminal, a rectangle with right-angled corners, is expanded into other terminals and non-terminals. Terminals include470a,470b,470c,471a,471b,472a,472b, and the like. Each terminal is an example of the source component144.

Non-terminals include401,402,410,411,412, and the like.

Decision boxes illustrated fromFIGS. 4B to 4Rare implemented in the flowchart illustrated inFIGS. 8A to 8P.

InFIG. 4Bentry-point401aillustrates a starting point of ACCESS SELECT query401, and end-point401billustrates an ending point of ACCESS SELECT query401.FIG. 4Balso illustrates two non-terminal boxes410and411, which are illustrated in greater detail inFIG. 4CandFIG. 4Drespectively.

FIGS. 4L to 4Rillustrate the set of predetermined rules for ORACLE SELECT query402in greater detail by utilizing a set of syntax diagrams. Each syntax diagram has an entry-point and an end-point, and describes possible paths between two points by going through other non-terminals, terminals, and/or decision boxes. The terminals are represented by round corner boxes, the non-terminals are represented by square boxes, and the decision boxes are represented by diamond shaped boxes.

InFIG. 4L, entry-point402aillustrates starting point of the set of predetermined rules for ORACLE SELECT query402and end-point402billustrates ending point of the set of predetermined rules for ORACLE SELECT query402.FIG. 4Lalso illustrates two non-terminal boxes430and411which are illustrated in greater detail inFIG. 4MandFIG. 4Drespectively.

FIG. 4Sillustrates all those source components that are categorized as indeterminable source components1481-24. Each of the indeterminable source components1481-24is desired to be represented by at least one component value146, in a desired query, which:1. either cannot be generated by utilizing an algorithm and/or a computer implementable logic, or2. is desired not to be generated by utilizing an algorithm and/or a computer implementable logic in at least one desired query.

FIG. 4Tillustrates all source components that are categorized as determinable source components1501-15. Each of the determinable source components1501-15is represented by a component value146which can be generated by utilizing an algorithm and/or computer implementable logic. Following are the exemplary determinable source components:1. SELECT470a,2. Whitespace470b,3. FROM470c,4. BY470d,5. opening parenthesis470e,6. closing parenthesis470f,7. comma470g,8. AND470h,9. period470i,10. AS470j,11. srcAlaGrp470k,12. equal sign470m,13. srcAlaTbl470n,14. ON470p, and15. srcAla1470q.

FIG. 5Aillustrates exemplary data tokens, wherein each of the data tokens is defined for utilization in conjunction with a component value146, representing one or more of the indeterminable source components illustrated inFIG. 4Sand/or determinable source components illustrated inFIG. 4T.

Data token qryGrp512, which is an example of a data token152, is represented by a token value154of a Boolean type, and can be represented by one of three possible token values: True, False and NULL. A set of data token rules158for qryGrp512is specified as follows:1. If qryGrp512is represented by True, which is an example of a token value154, then the desired query will be constructed as an aggregate query.2. Otherwise, the desired query will be constructed as a non-aggregate query.

qryGrp512can be associated with a component value146in a manner that queryBuilder can construct a desired query, either an aggregate query or a non-aggregate query, on the basis of a token value154, which represents qryGrp512. qryGrp512enables determination of a component value146for “GROUP471b”, which is an indeterminable source component148.

Data token qryUni514, which is an example of a data token152, is represented by a token value154of a Boolean type, and can be represented by one of three possible token values: True, False and NULL. A set of data token rules158for qryUni514is specified as follows:1. If gryUni514comprises True, which is an example of a token value154, then the desired query will be constructed as a UNION query by utilizing UNION ALL operator.2. Otherwise, the desired query will be constructed without UNION ALL operator.

gryUni514can be associated with a component value146in a manner that queryBuilder can construct a desired query, either a UNION ALL query or a non-union query, on the basis of a token value154, which represents gryUni514. gryUni514enables determination of a component value146for “UNION ALL471c” which is an indeterminable source component148.

Token value154of gryUni514could have been of another data type for catering to other operators, not illustrated in this example, such as, a UNION, a MINUS, and other similar operators, but in this exemplary implementation, gryUni514is utilized for catering only to the UNION ALL operator.

Data token srcUseCnd516, which is an example of a data token152, is represented by a token value154of a string type, which is either:1. a NULL value, or2. an empty string, or3. a string value, or4. a list of comma-separated string values comprising at least two string values.

A token value154, representing srcUseCnd516, can be associated with a component value146, which represents “table-name472k”, which is an example of indeterminable source component148, and be processed in conjunction with a parameter value162of a parameter prmUseCnd622, which is an example of a parameter160. The result of the processed token value154, which is an example of a token result156, representing srcUseCnd516, is utilized to determine whether the component value146, representing table-name472k, is desired to be utilized for constructing a desired query or not. The token value154, representing srcUseCnd516, can be processed at the time of:1. resolving a component value146, which represents table-name472k, and/or2. constructing a desired query.

srcUseCnd516is processed on the basis of the following set of data token rules158:1. A component value146, representing table-name472k, is utilized if either:a. a token value154, which represents srcUseCnd516, and which is also associated to the component value146, representing table-name472k, is either an empty string or a NULL value, orb. a token value154, which represents srcUseCnd516, and which is also associated to the component value146, representing table-name472k, comprises at least one string value which is also comprised by the parameter value162of prmUseCnd622. For example, if a token value154, which represents srcUseCnd516, and which is also associated to the component value146, representing table-name472k, is “abc,xyz”, and the parameter value162of prmUseCnd622is “nop,xyz”, then since the string value “xyz” is comprised by both the token value154, representing srcUseCnd516, and the parameter value162of prmUseCnd622, therefore the component value146, representing table-name472k, will be utilized for constructing the desired query. As another example, if a token value154, which represents srcUseCnd516, and which is also associated to the component value146, representing table-name472k, is “abc”, and the parameter value162of prmUseCnd622is “abc,xyz”, then since the string value “abc” is comprised by both the token value154, representing srcUseCnd516, and the parameter value162of prmUseCnd622, therefore the component value146, representing table-name472k, will be utilized for constructing a desired query. A comparison is always performed between the individual string values separated by a comma and such comparison is also case insensitive.2. The component value146, representing table-name472k, is not utilized for constructing a desired query if, either:a. the parameter value162of prmUseCnd622is an empty string or a NULL value, but the token value154, which represents srcUseCnd516, and which is also associated to the component value146, representing table-name472k, comprises at least one string value, orb. the token value154, which represents srcUseCnd516, and which is also associated to the component value146, representing table-name472k, comprises no string value that is comprised by the parameter value162of prmUseCnd622. For example, if the token value154, which represents srcUseCnd516, and which is also associated to the component value146, representing table-name472k, is “abc,xyz”, and the parameter value162of prmUseCnd622is “nop,rst”, then since neither the string value “abc” nor the string value “xyz” is comprised by the parameter value162of prmUseCnd622, therefore the component value146, representing table-name472k, will not be utilized for constructing a desired query. A comparison is always performed between the individual string values separated by a comma and such comparison is also case insensitive.

For the implementation of srcUseCnd516, it is mandatory that either:1. the token value154, which represents srcUseCnd516, and which is also associated to the component value146, representing table-name472k, must also be associated to all component values that are either utilized with the component value146, representing table-name472k, or are directly dependent on the component value146, representing table-name472k, or2. the component values, which are either utilized with the component value146, representing table-name472k, or are directly dependent on the component value146, representing table-name472k, should be structured in a manner that, if the component value146, representing table-name472k, is not utilized for constructing a desired query, then the component values, which are either utilized with the component value146, representing table-name472k, or are directly dependent on the component value146, representing table-name472k, should also not be utilized for constructing a desired query.

Data token colUseCnd518, which is an example of a data token152, is represented by a token value154of a string type, which is either:1. a NULL value, or2. an empty string, or3. a string value or4. a list of comma-separated string values comprising at least two string values.

A token value154, representing colUseCnd518, can be associated with a desired component value146, which represents fldAla472c, which is an example of an indeterminable source component148, and is processed in conjunction with the parameter value162of a parameter prmUseCnd622, which is an example of parameter160. The result of the processed token value154, which is an example of a token result156, representing colUseCnd518, is utilized to determine whether the component value146, representing fldAla472c, is desired to be utilized for constructing the desired query. The token value154, representing colUseCnd518, can be processed at the time of:1. resolving a component value146, which represents fldAla472c, and/or2. constructing the desired query.

colUseCnd518is processed on the basis of the following set of data token rules158:1. A component value146, representing fldAla472c, is utilized if either:a. a token value154, which represents colUseCnd518, and which is also associated to the component value146, representing fldAla472c, is either an empty string or a NULL value, orb. a token value154, which represents colUseCnd518, and which is also associated to the component value146, representing fldAla472c, comprises at least one string value that is also comprised by the parameter value162of prmUseCnd622. For example, if a token value154, which represents colUseCnd518, and which is also associated to the component value146, representing fldAla472c, is “abc,xyz”, and the parameter value162of prmUseCnd622is “nop,xyz”, then since the string value “xyz” is comprised by both the token value154, representing colUseCnd518, and the parameter value162of prmUseCnd622, therefore the component value146, representing fldAla472c, will be utilized for constructing a desired query. As another example, if a token value154, which represents colUseCnd518, and which is also associated to the component value146, representing fldAla472c, is “abc”, and the parameter value162of prmUseCnd622is “abc,xyz”, then since the string value “abc” is comprised by both the token value154, representing colUseCnd518, and the parameter value162of prmUseCnd622, therefore the component value146, representing fldAla472c, will be utilized for constructing a desired query. A comparison is always performed between the individual string values separated by a comma and such comparison is also case insensitive.2. The component value146, representing fldAla472c, is not utilized for constructing a desired query if, either:a. a parameter value162of prmUseCnd622is an empty string or a NULL value, but the token value154, which represents colUseCnd518, and which is also associated to the component value146, representing fldAla472c, comprises at least one string value, orb. the token value154, which represents colUseCnd518, and which is also associated to the component value146, representing fldAla472c, comprises no string value that is comprised by the parameter value162of prmUseCnd622. For example, if the token value154, which represents colUseCnd518, and which is also associated to the component value146, representing the fldAla472c, is “abc,xyz”, and the parameter value162of prmUseCnd622is “nop,rst”, then since neither the string value “abc” nor the string value “xyz” is comprised by the parameter value162of prmUseCnd622, therefore the component value146, representing fldAla472c, will not be utilized for constructing the desired query. A comparison is always performed between the individual string values separated by a comma and such comparison is also case insensitive.

For the implementation of colUseCnd518, it is mandatory that either:1. the token value154, which represents colUseCnd518, and which is also associated to the component value146, representing fldAla472c, must also be associated to all component values that are either utilized with the component value146, representing fldAla472c, or are directly dependent on the component value146, representing fldAla472c, or2. the component values, which are either utilized with the component value146, representing fldAla472cor are directly dependent on the component value146, representing fldAla472c, be structured in a manner that, if the component value146, representing fldAla472c, is not utilized for constructing the desired query, then the component values, which are either utilized with the component value146, representing fldAla472c, or are directly dependent on the component value146, representing fldAla472c, should also not be utilized for constructing the desired query.

Data token colReuse520, which is an example of a data token152, is represented by a token value154of a Boolean type and can comprise one of three possible token values: True, False and NULL. colReuse520is utilized in conjunction with a token value154, which represents another data token tknMonth524. colReuse520is to be associated with a component value146that represents fldAla472c. colReuse520enables queryBuilder to identify a component value146that represents fldAla472c, and it is desired to generate component values146non the basis of token result156of tknMonth524and which is also associated with the component value which represents fldAla472c, wherein the token result156of tknMonth524is obtained by processing the token value154, which represents tknMonth524.

For implementing colReuse520, it is mandatory that the component values, which are utilized with a component value146, which represents fldAla472c, or which are directly dependent on the a component value146which represents fldAla472c, are to be structured in a manner that all component values, which are either utilized with the component value146, which represents fldAla472c, or which are directly dependent on component value146, which represents fldAla472c, can be generated together with the component value146, which represents fldAla472c.

Data token tknAlias522, which is an example of a data token152, is represented by a token value “!”, an exclamation sign without quotes, as specified by a set of data token rules158for tknAlias522. The set of data token rules158for tknAlias522also specifies that tknAlias522is implicitly associated with the source component table-name472kin such a manner that for each such new component value146, which represents table-name472k, tknAlias522is utilized for generating a new and a unique table/view alias comprising one or more alphabets. Since the association of tknAlias522is implicit, “!” (exclamation sign without quotes) is never utilized with any component value146that represents table-name472k.

tknAlias522enables determination of a component value146for srcAla472e, which is an indeterminable source component148.

tknAlias522can also be associated with a component value146that represents fldNamCol472band/or fldXpr472d, wherein the association with the component value146which represents fldNamCol472band/or fldXpr472dis achieved by embedding “!” (exclamation sign without quotes) in a component value146which represents fldNamCol472band/or fldXpr472d. On processing, “!” (exclamation sign without quotes) will be replaced by a table/view alias, followed by a period, which was generated for a component value146which represents fldNamCol472band/or fldXpr472dand is a source table/view of the component value146which represents fldNamCol472band/or fldXpr472d, in accordance with the predetermined rules illustrated inFIGS. 4B to 4R. For example, if for tblA, a component value146representing table-name472k, which is a table/view alias, and which is generated as a result of processing a token value154, which represents tknAlias522, is “b” (lowercase b without quotes), then the following are a few examples which illustrate component values which are related to the component value tblA and represent fldNamCol472band/or fldXpr472d, and which are also associated with “!” (exclamation sign without quotes):1. a component value “!fld—01” will be “b.fld—01” after processing of “!” (exclamation sign without quotes),2. a component value “!fld—01+!fld—02” will be “b.fld—01+b.fld—02” after processing of “!” (exclamation sign without quotes),3. a component value “!fld—04+INT(fld—05)−!fld—06” will be “b.fld—04+INT(fld—05)−b.fld—06” after processing of “!” (exclamation sign without quotes), and4. a component value “fld—09” will be “fld—09” after processing of “!” (exclamation sign without quotes) because “!” (exclamation sign without quotes) is not embedded in component value “fld—09”.

Data token tknMonth524, which is an example of a data token152, is utilized for creating one or more component values that represent fldNamCol472b, fldAla472c, and/or fldXpr472d. tknMonth524is processed on the basis of a token value154, which represents colReuse520, and a parameter value162of a parameter prmMthCnt614, which is an example of a parameter160. According to a set of data token rules158for the tknMonth524, tknMonth524can be utilized in one of the following two formats:1. % TknMth %, which can be embedded in a component value146representing fldNamCol472b, fldAla472c, and/or fldXpr472d, and2. % TknMth,argComp,argTrue,argFalse %, wherein tknMonth524is utilized with three arguments: argComp, argTrue and argFalse. This format of tknMonth524can only be embedded in component values that represent fldNamCol472band/or fldXpr472d. In this format, all three arguments, argComp, argTrue, and arg False, are mandatory, and are required to be represented by a data value which is either a valid column/field name or is a valid expression. In this format, tknMonth524is utilized for determining the component values of the following indeterminable source components:a. IIF471f,b. DECODE471n,c. fldNamCnd472g,d. value472h,e. true-result472i, andf. false-result472j.

The processing of tknMonth524is done on the basis of a token value154, which represents colReuse520, and the parameter value162of prmMthCnt614, which is an example of a parameter160.

An exemplary set of data token rules158for colReuse520specifies that if a token value which represents colReuse520is a NULL value or False, or the parameter value162of prmMthCnt614is either zero or not defined, then tknMonth524is processed on the basis of the following part of the set of data token rules158for tknMonth524:1. If tknMonth524is embedded as % TknMth %, which is an example of a token value154, then % TknMth % will be replaced with an empty string wherever it is embedded.2. If tknMonth524is embedded as % TknMth,colCmpare,colTrue,colFalse %, which is an example of a token value154, then % TknMth,colCmpare,colTrue,colFalse % will be replaced with colTrue wherever tknMonth524is embedded.

The set of data token rules158for colReuse520also specifies that if the token value154, which represents colReuse520, is True, and the parameter value162of prmMthCnt614is a positive integer, then the token value154, which represents tknMonth524, is processed in a manner that the component value146representing fldAla472calong with all component values, which are either related to the component value146representing fldAla472cor which are dependent on the component value146representing fldAla472c, are utilized for constructing a desired query as many number of times as specified by the parameter value162of prmMthCnt614. For processing tknMonth524, the parameter value162of prmBegMth616, which is an example of a parameter160, is also utilized. The component value146which represents fldAla472calong with all component values146n, which are either related to the component value146representing fldAla472c, or which are dependent on the component value146representing fldAla472c, are processed in a manner that all these component values are utilizable for constructing the desired query as many number of times as specified by the parameter value162of prmMthCnt614. tknMonth524is processed on the basis of the following parts of the set of data token rules158for tknMonth524:1. If tknMonth524is utilized as % TknMth %, which is an example of a token value154, then each iteration of % TknMth %, which results from the processing of the component value representing fldAla472c, along with all component values that are either related to the component value representing fldAla472cor are dependent on the component value representing fldAla472c, is replaced by the first three letters of the name of the next month, starting from the month represented by the parameter value162of prmBegMth616, and always continuing from Jan (for January) after Dec (for December) is reached. Here are two examples:a. If the parameter value162of prmMthCnt614is 4, and the parameter value162of prmBegMth616is 3 (which represents the starting month of March), then the component value which represents fldAla472c, along with all component values that are either related to the component value representing fldAla472c, or are dependent on the component value representing fldAla472c, will be utilized in the desired query 4 times, and % TknMth % will be replaced in all component values by:i. Mar, on the first utilization of the component values,ii. Apr, on the second utilization of the component values,iii. May, on the third utilization of the component values, andiv. Jun, on the fourth utilization of the component values.b. If the parameter value162of prmMthCnt614is 5, and the parameter value162of prmBegMth616is 11 (which represents the starting month of November), then the component value which represents fldAla472c, along with all component values which are either related to the component value representing fldAla472cor are dependent on the component value representing fldAla472c, will be utilized in the desired query 5 times, and % TknMth % will be replaced in all component values by:i. Nov, on the first utilization of the component values,ii. Dec, on the second utilization of the component values,iii. Jan, on the third utilization of the component values,iv. Feb, on the fourth utilization of the component values, andv. Mar, on the fifth utilization of the component values.2. If tknMonth524is utilized as % TknMth,argComp,argTrue,argFalse %, which is an example of a token value154, then each iteration of % TknMth,argComp,argTrue,argFalse %, which results from the processing of the component value representing fldAla472c, along with all component values, which are either related to the component value representing fldAla472c, or which are dependent on the component value representing fldAla472c, is replaced by either an IIF471ffunction or a DECODE471nfunction depending on the database for which the desired query is being constructed. In the IIF471fand the DECODE471nfunctions, argComp is compared with a value that is equal to the parameter value162of prmBegMth616at the first iteration, and the value will be increased by 1 for every next iteration, of the component values representing fldAla472c, along with all component values, which are either related to the component value representing fldAla472cor are dependent on the component value representing fldAla472c. The value will start at 1 whenever the value goes beyond 12. Here are two examples:a. If the parameter value162of prmMthCnt614is 4, the parameter value162of prmBegMth616is 3, and tknMonth524is represented by% TknMth,colCmpare,colTrue,colFalse %, then% TknMth,colCmpare,colTrue,colFalse % will be replaced by:i. For MICROSOFT ACCESS:1) IIF(colCompare=3,colTrue,colFalse)2) IIF(colCompare=4,colTrue,colFalse)3) IIF(colCompare=5,colTrue,colFalse)4) IIF(colCompare=6,colTrue,colFalse)ii. For ORACLE:1) DECODE(colCompare,3,colTrue,colFalse)2) DECODE(colCompare,4,colTrue,colFalse)3) DECODE(colCompare,5,colTrue,colFalse)4) DECODE(colCompare,6,colTrue,colFalse)b. If the parameter value162of prmMthCnt614is 5, the parameter value162of prmBegMth616is 11, and tknMonth524is represented by % TknMth,colCmpare,colTrue,colFalse %, then % TknMth,colCmpare,colTrue,colFalse % will be replaced by:i. For MICROSOFT ACCESS:1) IIF(colCompare=11,colTrue,colFalse)2) IIF(colCompare=12,colTrue,colFalse)3) IIF(colCompare=1,colTrue,colFalse)4) IIF(colCompare=2,colTrue,colFalse)5) IIF(colCompare=3,colTrue,colFalse)ii. For ORACLE:1) DECODE(colCompare,11,colTrue,colFalse)2) DECODE(colCompare,12,colTrue,colFalse)3) DECODE(colCompare,1,colTrue,colFalse)4) DECODE(colCompare,2,colTrue,colFalse)5) DECODE(colCompare,3,colTrue,colFalse)

Data token tknCurlyBrackets526, which is an example of a data token152, can be embedded in the component value146of the indeterminable source component whrXpr472a. Data token tknCurlyBrackets526is represented by curly brackets, which are always utilized in a pair; an opening curly bracket, which is an example of a token value154of tknCurlyBrackets526, “{” (without quotes) and a closing curly bracket, which is an example of a token value154of tknCurlyBrackets526, “}” (without quotes). The opening curly bracket is always on the left side of the closing curly bracket. The curly brackets may be nested.

FIGS. 5B and 5Cillustrate an exemplary flowchart which explains an exemplary set of data token rules158, specifying an exemplary processing logic, for tknCurlyBrackets526. However, the exemplary flowchart does not provide any means for error checking and/or incorrect utilization of tknCurlyBrackets526; throughout this exemplary flowchart, it is assumed that tknCurlyBrackets526is utilized appropriately.

The processing logic for tknCurlyBrackets526starts at operation550a.

At operation550b, whrXpr472a, represented as “a target string” in the flowchart, is assigned to a variable EmbStr. In this example, tknCurlyBrackets526can only be utilized in a component value representing whrXpr472a. However, tknCurlyBrackets526can be utilized in any other component value of a string type, if required and/or desired.

At operation550c, the position of the last occurrence of “{” (without quotes) from the left side of EmbStr is stored in a variable Pos1.

At operation550d, it is checked whether the last occurrence of “{” (without quotes) is found or not. If the last occurrence of “{” (without quotes) is not found, then the flow advances to operation550e. Otherwise, the flow continues to operation550f. The last occurrence of “{” (without quotes) will not be found in EmbStr only in one of the following two cases (assuming that the curly brackets are not utilized incorrectly):1. A token value154representing tknCurlyBrackets526is not utilized in whrXpr472a.2. The processing of tknCurlyBrackets526is complete.

At operation550e, EmbStr is returned and processing of tknCurlyBrackets526is complete.

At operation550f, the first occurrence of “}” (without quotes) from the left side, after Pos1, is located and assigned to a variable Pos2.

At operation550g, the string between Pos1 and Pos2 (characters at Pos1 and Pos2 are not included) is assigned to a variable DtaTkn.

At operation550h, DtaTkn, which carries a token value representing a data token, is processed in a desired manner, and the result of the processed token value carried by DtaTkn is assigned to a variable TknResult. In this particular example, a parameter would be a result of the processing of the token value carried by DtaTkn. If the parameter corresponding to the token value of DtaTkn is found, then TknResult will comprise the found parameter. Otherwise, TknResult will comprise a NULL value.

At operation550i, a variable Pos3 is assigned a value of (Pos2+1).

At operation550j, it is checked whether the character at Pos3 in EmbStr is “}” (without quotes) or not. If the character at Pos3 in EmbStr is “}”, then the flow continues to operation550k. Otherwise, the flow continues to operation550l.

At operation550k, a variable Pos4 is assigned the position of the last occurrence of “{” (without quotes) just before Pos1 from the left side in EmbStr.

At operation550l, it is checked whether TknResult carries a NULL value or not. If TknResult carries a NULL value, then the flow continues to operation550m. Otherwise, the flow continues to550n.

At operation550n, the string starting from Pos1 and ending at Pos2 (both Pos1 and Pos2 included) in EmbStr is replaced with the value carried by TknResult.

At operation5500, it is checked whether TknResult carries a NULL value or not. If TknResult carries a NULL value, then the flow continues to operation550p. Otherwise, the flow continues to550q.

At operation550r, the string starting from Pos4 and ending at Pos3 (both Pos4 and Pos3 are included) in EmbStr is replaced with the value carried by TknResult.

At operation550q, the character at Pos3 is replaced with a space character.

At operation550s, the character at Pos4 is replaced with a space character.

At operation550t, the string starting from Pos1 and ending at Pos2 (both Pos1 and Pos2 included) in EmbStr is replaced with the value carried by TknResult.

FIG. 6illustrates exemplary parameters which are utilized for constructing a desired query. Each parameter is given an arbitrary name for the purpose of explanation, and reference. The names given to the exemplary parameters have no impact on the implementation of the concepts, principles, and/or methodology of the invention.FIG. 6illustrates the following exemplary parameters:1. Parameter prmQryId612, which is an example of a parameter160, is of a string type. The parameter value162of prmQryId612is utilized to identify a source object, which is desired to be utilized for constructing a desired query.2. Parameter prmMthCnt614, which is an example of a parameter160, is of a number type. The parameter value162of prmMthCnt614specifies the number of months which is utilized for processing a token value which represents tknMonth524. The parameter value162of prmMthCnt614can be an integer ranging from 0 and 12, both inclusive.3. Parameter prmBegMth616, which is an example of a parameter160, is of a number type. The parameter value162of prmBegMth616is utilized for specifying the starting month which is utilized for processing a token value which represents tknMonth524. The parameters of prmBegMth616can be an integer ranging from 1 and 12, both inclusive.4. Parameter prmOraQry618, which is an example of a parameter160, is of a Boolean type. The parameter value162of prmOraQry618is utilized for determining the database for which a desired query is to be constructed. If the parameter value162of prmOraQry618is True, then the desired query is constructed for ORACLE. Otherwise, the desired query is constructed for MICROSOFT ACCESS.5. Parameter prmLftJoi620, which is an example of a parameter160, is of a Boolean type. The parameter value162of prmLftJoi620is utilized for determining the type of a JOIN which is to be used in a desired query. If the parameter value162of prmLftJoi620is True, then all joins in a desired query will be converted to LEFT joins. Otherwise, all joins in a desired query will be INNER joins. The parameter value162of the prmLftJoi620is utilized for determining a component value146of the following indeterminable source components:a. INNER471h,b. LEFT471i,c. Plus sign471m6. Parameter prmUseCnd622, which is an example of a parameter160, is of a string type. The parameter value162of prmUseCnd622is utilized for processing a token value, which represents srcUseCnd516and/or colUseCnd518.7. Parameter prmItmBeg624, which is an example of a parameter160, is of a string type. The parameter value162of prmItmBeg624is utilized for processing “itmBeg” (without quotes), which is the token value which represents tknItemCodeBegin528.8. Parameter prmItmEnd626, which is an example of a parameter160, is of a string type. The parameter value162of prmItmEnd626is utilized for processing “itmEnd” (without quotes), which is the token value which represents tknItemCodeEnd530.

FIG. 7Aillustrates a few exemplary attributes (which may also be called columns or fields), for an exemplary data model164illustrated inFIG. 7B, which are to be included in a source object repository to hold component values for those indeterminable source components, out of all indeterminable source components illustrated in theFIG. 4S, whose component values are not determinable either by utilizing a parameter160, and/or by utilizing a data token152, according to an aspect of an embodiment of the invention.

Attributes, illustrated inFIG. 7A, are given arbitrary names for the purpose of explanation, and reference. The names given to the attributes have no impact on the implementation of the principles of the invention. The following attributes are illustrated inFIG. 7A:1. Attribute qryWhr752is utilized for storing and determining a component value146of the following indeterminable source components:a. WHERE471a, andb. whrXpr472a2. Attribute srcId754is utilized for storing and determining a component value146of the following indeterminable source components:a. table-name472k, andb. JOIN471j.3. Attribute srcJoinFld756is utilized for storing and determining a component value146of fldAla1472m, which is an example of an indeterminable source component148.4. Attribute srcJoinToFld758is utilized for storing and determining a component value146of fldAla2472p, which is an example of an indeterminable source component148.5. Attribute srcJoinToSrc760is utilized for storing and determining a component value146of srcAla2472n, which is an example of an indeterminable source component148.6. Attribute colAla762is utilized for storing and determining a component value146of fldAla472c, which is an example of an indeterminable source component148.7. Attribute colXpr764is utilized for storing and determining a component value146of the following indeterminable source components:a. fldNamCol472b, andb. fldXpr472d8. Attribute colGrpFun766is utilized for storing and determining a component value146of the following indeterminable source components:a. fldAlaGrp471e,b. SUM471g, andc. fldXpr472d

FIG. 7Billustrates a data model, which is an example of a data model164, which is utilized for creating an exemplary source object repository168, wherein the exemplary source object repository168is utilized for storing one or more source objects, along with one or more embedded token values, which are desired to be utilized for constructing a desired query. The exemplary source object repository168, which is created on the basis of the exemplary data model164, can be created by utilizing one or more data structures which may include, but are not limited to, a multidimensional database, a flat file database, a conventional database, an array, a matrix, a spreadsheet, a class, a comma-separated file, and a variable. The exemplary data model164is created in a manner that it is sufficient for creating an exemplary source object repository168which is sufficient for:1. storing one or more desired source objects as structured and/or semi-structured data,2. identifying and retrieving a desired source object out of the one or more desired source objects,3. maintaining, in a desired manner, a desired hierarchy and/or a desired relationship among all the indeterminable source components illustrated inFIG. 4S,4. maintaining a desired order among one or more component values belonging to srcId754.5. maintaining a desired order among one or more component values belonging to colAla762.6. associating all token values of the data tokens illustrated inFIG. 5A, either implicitly and/or explicitly, with one or more component values of one or more of the source components represented by the attributes illustrated inFIG. 7A, and7. utilizing a source object and/or a desired part thereof in another source object.

The exemplary data model164comprises the following three entities:1. Query702.2. Query Source704.3. Query Field706.

Query702is the top level entity which is utilized to comprise information which is sufficient for identifying a source object and also information which is applicable to the entire query. Query702comprises the following attributes:1. qryId732,2. qryWhr752,3. qryGrp512, and4. qryUni514.

qryId732is an exemplary attribute which is utilized in query702for the identification of a specific source object. qryId732acts as a primary key, and is utilized for uniquely identifying each source object. In query702, qryId732is implemented as a string, and may comprise any valid data value of a string type. Since qryId732is utilized only for identifying and referencing a source object, there are no specific rules for a data value which may be stored in qryId732. However, in this example, the data value stored in qryId732must be unique for each source object, and may comprise only printable characters. qryId732is of a string type in this exemplary implementation; however, it may be of any other data type which is sufficient for implementing a primary key, such as, a long integer, a short integer, a GUID, and the like.

qryWhr752is utilized for storing a WHERE clause expression in this exemplary data model. qryWhr752is of a string type and should be of a sufficient size to store all the desired WHERE clause expressions, along with one or more token values representing tknCurlyBrackets526, tknItemCodeBegin528, and/or tknItemCodeEnd530. A component value stored in qryWhr752is a string, which:1. is optionally embedded in one or more of the following:a. a token value representing tknCurlyBrackets526,b. a token value representing tknitemCodeBegin528,c. a token value representing tknitemCodeEnd530, andd. any combinations thereof, and2. becomes a valid WHERE clause expression, as may be desired for MICROSOFT ACCESS, or for ORACLE, or for both MICROSOFT ACCESS and ORACLE, after all token values, which represent tknCurlyBrackets526, tknItemCodeBegin528, and/or tknItemCodeEnd530, and which are embedded in the component values that are stored in gryWhr752, are processed.

qryGrp512is embedded in query702, so as to enable queryBuilder to determine whether a desired query is an aggregate query or not.

qryUni514is embedded in query702, so as to enable queryBuilder to determine whether a desired query is a UNION ALL query or not.

srcQryId734is an exemplary attribute which is utilized in query source704for enabling a one-to-many relationship712. srcQryId734is a foreign key which is related to qryId732of query702. In query source704, srcQryId734is implemented as a string data type, and is of the same size as of qryId732. srcQryId734and srcId754serve as a composite primary key in query source704.

srcOrd736is an exemplary attribute which is utilized in query source704for maintaining a desired order among a plurality of component values that are stored in srcId754. In query source704, srcOrd736is implemented as a long integer data type; however, srcOrd736can be implemented as any other data type which is sufficient for maintaining an order among a plurality of component values that are stored in srcId754. Such data types may include, but are not limited to, a short integer, a string, and a floating point.

srcId754is utilized for specifying the name of a table/view which is desired to be utilized for constructing a desired query. The component values stored in srcId754must be unique within one source object because srcId754is a part of the composite primary key of query source704. srcId754may be represented by either:1. a component value which represents a table/view name which exists in a database which is intended to execute a desired query, or2. an arbitrary view name (which must comprise all printable characters in this example), only if a data value represents srcReuseId738.

srcReuseId738is an exemplary attribute which is utilized in query source704to enable a utilization of another source object in query source704. srcReuseId738is a foreign key and may optionally comprise a value from qryId732. For this example, srcReuseId738cannot comprise a data value which represents its parent qryId732, because such a data value will cause an infinite recursive loop in this exemplary data model. The one-to-many relationship714is implemented by utilizing qryId732and srcReuseId738.

srcUseCnd516is embedded in query source704. If the processing of the token value comprised by srcUseCnd516determines that srcId754cannot be utilized for constructing a desired query, then the complete record, comprising the token value of srcUseCnd516and the data value of srcId754, including all child records, will not be utilized for constructing a desired query.

srcJoinFld756, srcJoinToFld758, and srcJoinToSrc760are utilized to specify information which is required to join two tables, two views or one table and one view. srcJoinFld756is utilized to specify a field alias which belongs to a table/view specified by srcId754of the current record. srcJoinToFld758is utilized to specify a field alias which belongs to the other table/view which is to be joined with table/view specified by srcId754of the current record, and is specified by the component value representing srcJoinToSrc760. In this exemplary embodiment, self joins are not implemented.

colQryId740and colSrcId742are two exemplary attributes which are utilized in query field706for enabling the one-to-many relationship716. colQryId740and colSrcId742are foreign keys which are related to srcQryId734and srcId754respectively. colQryId740and colSrcId742are implemented by utilizing a string data type and are of the same size as srcQryId734and srcId754respectively. colQryId740, colSrcId742, and colAla762serve as a composite primary key in query field706.

colOrd744is an exemplary attribute which is utilized in query field706for maintaining a desired order among a plurality of those component values that are stored in colAla762. In query field706, colOrd744is implemented as a long integer data type; however, colOrd744could have been implemented as any other data type which is sufficient for maintaining a desired order among a plurality of component values which are stored in colAla762. Such data types may include, but are not limited to, a short integer, a string, and a floating point.

colAla762is utilized to specify a valid column/field alias for a desired query. colAla762is implemented as a string data type in this exemplary data model. A component value, which is stored in colAla762, may also be embedded with % TknMth % which is a token value representing tknMonth524. The component values stored in colAla762must be unique within one source object with reference to their parent component value, which is stored in srcId754, because colAla762is a part of the composite primary key of query source704.

colXpr764is utilized to specify a valid expression for a desired query. colXpr764is implemented as a string data type in this exemplary data model. A component value, which Is stored in colAla762, may also be embedded with:1. one or more token values representing tknMonth524, and/or2. one or more “!” (exclamation mark without quotes) representing tknAlias522.

colUseCnd518is embedded in query field706. If the processing of the token value comprised by colUseCnd518determines that colAla762cannot be utilized for constructing the desired query, the entire record, comprising the token value of colUseCnd518and component values of colAla762, will not be utilized for constructing a desired query.

colGrpFun766is utilized for specifying a SUM function for columns/fields which are desired to be summed in a desired query which is constructed as an aggregate query. In this exemplary embodiment, if colGrpFun766is represented by “SUM” (without quotes), then the SUM function is applied to the component value stored in colXpr764. Otherwise, if colGrpFun766is represented by “Group” (without quotes), then colAla762is utilized in a GROUP BY clause, otherwise the component value stored in colXpr764is treated as an expression and is not included in the GROUP BY clause. In this exemplary embodiment, the utilization of only the SUM function is illustrated; however, colGrpFun766can be utilized for implementing any other function, such as, AVG, MAX, MIN, and the like.

colReuse520is embedded in query field706, and is utilized to specify those records of query field706which are desired to be replicated.

FIG. 7Cillustrates an exemplary implementation of the exemplary data model164, illustrated inFIG. 7B, as an exemplary source object repository168. Query702is implemented as a tblQry782, which is a MICROSOFT ACCESS database table. Query source704is implemented as a tblQrySrc784, which is a MICROSOFT ACCESS database table. Query field706is implemented as a tblQryFld786, which is a MICROSOFT ACCESS database table.

FIGS. 8A to 8Pillustrate an exemplary flowchart of an exemplary software component constructor170which is implemented as a function and is called queryBuilder. queryBuilder is utilized for constructing a desired query by utilizing a source object166, which is stored in tblQry782, tblQrySrc784, and tblQryFld786, which are the data tokens illustrated inFIG. 5A, and the parameters illustrated inFIG. 6. The exemplary flowchart may be implemented in any computer programming language. The variable names and the programming conventions utilized in the exemplary flowchart are not dependent on any specific computer programming language. However, the implementation of this exemplary flowchart may require a programming language specific interpretation of one or more operations, illustrated in the exemplary flowchart. For example, a concatenation of two or more string values in the exemplary flowchart is represented by a plus sign, whereas this same operation is represented by an ampersand sign in some programming languages. Moreover, all variable names and function names utilized in the exemplary flowchart are exemplary and can be changed as may be desired and/or required for any particular implementation.

In the exemplary flowchart, the UNION ALL operator is implemented for sub queries only.

In the exemplary flowchart, arguments argComp, argTrue and argFalse are utilized symbolically. However, the values comprised by these arguments will be utilized in each operation, wherever any of these arguments are utilized.

In the exemplary flowchart, it is implied that whenever tknMonth524is replaced in an operation, the complete representation of tknMonth524, starting from the first % (percent sign) to the last % (percent sign), is replaced. For this exemplary flowchart, it is assumed that only one token value representing tknMonth524is embedded in one database field.

In the exemplary flowchart, a variable is considered empty if the variable:1. is empty, or2. comprises a NULL value, or3. comprises an empty value according to its data type, for example, an empty string, a zero, and a False.

In the exemplary flowchart, all variables, except for varCalCnt and varMthAry, are defined at the module level, and are created again on any recursive call to the function queryBuilder, with the previous variables retaining their respective values. However, the variables varCalCnt and varMthAry are not initialized on a recursive call to the function queryBuilder. All parameters, defined inFIG. 6, are defined at a global level, and are not initialized on any recursive call.

In the exemplary flowchart, double quotes are utilized for identifying a string value. The double quotes are never a part of the string in the exemplary flowchart. However, a single quote, whenever utilized, is a part of a string value.

The exemplary flowchart does not include any error and/or exception handling; it is assumed that all the component values and token values are provided correctly, and are within the required ranges.

The exemplary flowchart is self-explanatory. However, for clarity, some operations have been described in greater detail.

In addition to the above-mentioned field names, the following data tokens, parameters, and table names are also utilized without their respective numerals in the exemplary flowchart illustrated inFIG. 8A to 8X:1. prmQryId612,2. prmMthCnt614,3. prmOraQry618,4. prmLftJoi620,5. tblQry782,6. tblQrySrc784,7. tblQryFld786,8. tknMonth524,9. prmBegMth616, and10. prmUseCnd622,

InFIG. 8A, at terminal810a, the function queryBuilder starts. queryBuilder receives a parameter for prmQryId612, which is utilized to identify a desired source object from tblQry782.

At decision box810b, it is checked whether this is the first call to queryBuilder or not. This check is required for a one-time initialization of the global variables, varCalCnt and varMthAry, which are initialized at operation810cand operation810drespectively. If this is the first call to queryBuilder, then the flow continues to operation810c. Otherwise, the flow continues to operation810e.

At operation810e, an object varQryRcd is initialized. The object varQryRcd is an exemplary ADO Recordset Object, and comprises information about a Recordset, which is opened by utilizing the object varQryRcd.

At operation810f, an object varSrcRcd is initialized. The object varSrcRcd is an exemplary ADO Recordset Object, and comprises information about a Recordset, which is opened by utilizing the object varSrcRcd.

At operation810g, an object varFldRcd is initialized. The object varFldRcd is an exemplary ADO Recordset Object, and comprises information about a Recordset, which is opened by utilizing the object varFldRcd.

At operation810h, an array variable varTblAry is initialized. varTblAry is a two dimensional array that is utilized for storing component values in srcId754along with a table/view alias, which is generated, as a result of processing tknAlias522, for srcId754.

InFIG. 8B, operations811pand811qare called only once for a query; these operations are not called for sub-queries.

At operation811p, varAlaCnt is initialized to zero. varAlaCnt is utilized for calculating an alias for tknAlias522.

At operation811q, all parameters illustrated inFIG. 6are resolved. The parameters may either be resolved by a direct input of a user, or be retrieved from a computer readable recording medium.

InFIG. 8C, at operation812b, the object varQryRcd is opened, wherein the object varQryRcd comprises all fields of tblQry782, wherein the data value of qryId732is equal to the parameter value162of prmQryId612. Since qryId732is the primary key, the object varQryRcd will comprise maximum one record.

At operation812c, the object varSrcRcd is opened, wherein the object varSrcRcd comprises all fields of tblQrySrc784, wherein the data value of srcQryId734is equal to the data value of qryId732, and the order of the Recordset comprised by the object varSrcRcd is on the data values of srcOrd736.

At operation812f, the varSrcAvl is assigned a result of the processed token value of srcUseCnd516. The processing of the token value of srcUseCnd516is done in an exemplary function called CheckAvailability, which is illustrated in detail inFIG. 8Q. If the function CheckAvailability returns True, it implies that the current record pointed by the object varSrcRcd will be utilized by queryBuilder. If, on the other hand, the function CheckAvailability returns False, it implies that the current record pointed by the object varSrcRcd will not be utilized by queryBuilder.

At operation8121, tknAlias522is processed. tknAlias522is processed by an exemplary function NewAlias( ) which is illustrated in detail inFIG. 8R. The alias generated by a function NewAlias( ) is then stored in a variable varCurAla.

InFIG. 8D, at operation813c, queryBuilder is called recursively for constructing a sub-query, wherein the sub-query is identified by a data value of srcReuseId738. The resultant sub-query is stored in a variable varSubQry.

At operation813i, the object varFldRcd is opened, wherein the object varFldRcd comprises all fields of tblQryFld786, wherein the data value of colQryId740is equal to the data value of srcQryId734, the data value of colSrcId742is equal to the data value of srcId754, and the order of the Recordset represented by the object varFldRcd is on the data values of colOrd744.

At operation813m, varFldAvl is assigned a result, which is an example of token result156, of the processed token value of colUseCnd518. The processing of the token value of colUseCnd518is done in the exemplary function CheckAvailability, which is illustrated in detail inFIG. 8Q. If the function CheckAvailability returns True, it implies that the current record pointed by the object varFldRcd will be utilized by queryBuilder. If, on the other hand, the function CheckAvailability returns False, it implies that the current record pointed by the object varFldRcd will not be utilized by queryBuilder.

FIG. 8Qillustrates an exemplary flowchart of an exemplary processing of two data tokens, srcUseCnd516and colUseCnd518, wherein the processing of srcUseCnd516and colUseCnd518is implemented by utilizing the exemplary function CheckAvailability. Since the processing logic of both data tokens, srcUseCnd516and colUseCnd518, is the same, the processing of both data tokens is implemented as one function.

At operation826a, the function CheckAvailability starts and receives a parameter prmCndTkn which comprises a parameter which will be either a token value representing srcUseCnd516, or a token value representing colUseCnd518, depending on the location from where the function CheckAvailability is called.

At operation826d, the parameter value162of prmUseCnd622, which comprises either a list of comma-separated string values, or a single string value, is stored as an array in an array variable varCndPrm. The following are a few examples illustrating the storage of contents of prmUseCnd622as an array in varCndPrm:1. If prmUseCnd622is empty, then varCndPrm will comprise no array item.2. If prmUseCnd622comprises only one string value, then varCndPrm will comprise one array item.3. If prmUseCnd622comprises 10 comma-separated string values, then varCndPrm will comprise 10 array items, wherein each array item will comprise a string value.

FIG. 8Rillustrates an exemplary flowchart of an exemplary processing of the function NewAlias( ) which is utilized for an exemplary processing of tknAlias522. Each time the function NewAlias( ) is called, it returns a new alias comprising one or more alphabets.

At operation827e, MOD represents modulo operation, which finds the remainder of a division of the value of a variable varWrkCnt by 26.

At operation827f, INT represents an integer function, which returns only the integer part of a number without rounding the number.

At operation827i, CHR represents a function, which returns an ASCII character which is represented by the number that is passed to CHR as a parameter.

At operation827k, the function NewAlias( ) returns the newly calculated alias.

FIG. 8Sillustrates an exemplary function WhereClause, which is utilized by queryBuilder for merging two WHERE clauses together. The function WhereClause also utilizes an exemplary function WhereToken, which is utilized for processing tknCurlyBrackets526, tknItemCodeBegin528, and tknItemCodeEnd530.

At operation828a, the function WhereClause starts and receives two parameters, prmOrgWhr and prmNewWhr, wherein prmOrgWhr comprises an already built WHERE clause, which may be an empty string in certain cases, and prmNewWhr, which may be an empty string and which comprises a WHERE clause that is desired to be merged in prmOrgWhr.

At operation828d, the function WhereToken is utilized for processing tknCurlyBrackets526, tknItemCodeBegin528, and tknItemCodeEnd530.

FIGS. 8T to 8Xillustrate an exemplary flowchart of an exemplary implementation of a processing of tknCurlyBrackets526, tknItemCodeBegin528, and tknItemCodeEnd530on the basis of the processing rules, illustrated inFIGS. 5B and 5C, and the processing rules specified for tknItemCodeBegin528and tknItemCodeEnd530.

InFIG. 8T, at operation829a, the function WhereToken starts and receives a parameter prmRawWhr comprises a WHERE clause which may contain one or more token values representing tknCurlyBrackets526, tknItemCodeBegin528, and/or tknItemCodeEnd530.

FIGS. 9A to 9Oillustrate exemplary source objects, which are stored in the source object repositories tblQry782, tblQrySrc784, and tblQryFld786, which are to be utilized by queryBuilder for constructing a desired query.

FIG. 9Aillustrates a specific exemplary segment from tblQry782(represented as782abecause it illustrates a specific exemplary segment of tblQry782), which shows an exemplary source object that is identifiable by qryA (a data value representing qryId732), hereinafter called exemplary source object qryA, and which is represented in a record901. The exemplary source object qryA can be utilized for constructing a desired query. The exemplary source object qryA is not associated with any data token. Resultantly, the desired query constructed by utilizing the exemplary source object qryA will always be the same for a specific database. However, the parameters of prmOraQry618and prmLftJoi620can change the resultant constructed query because these parameters are utilized during a construction of the desired query without utilizing any data token.

An exemplary segment of tblQrySrc784(represented as784abecause it illustrates a specific exemplary segment of tblQrySrc784) comprises three records which are related to record901. Each record in784aillustrates information relating to a table which is to be utilized in a desired query which is to be constructed by utilizing the exemplary source object qryA.784aillustrates:1. A record901acomprising tblItems.2. A record901bcomprising tblBrands, wherein tblBrands will be JOINED with tblItems in the desired query constructed by utilizing the exemplary source object qryA by utilizing a column brandCode.3. A record901ccomprising tblOrigins, wherein tblOrigins will be JOINED with tblItems in the desired query constructed by utilizing the exemplary source object qryA by utilizing a column originCode.

FIG. 9Billustrates exemplary records from tblQryFld786(represented as786bbecause it illustrates a specific exemplary segment of tblQryFld786) which are related to the record901a, wherein the record901ais illustrated in an exemplary segment of tblQrySrc784(represented as784bbecause it illustrates a specific exemplary segment of tblQrySrc784). The records illustrated in786bcomprise columns of tblItems, which is comprised by record901a, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object qryA.

FIG. 9Cillustrates exemplary records from tblQryFld786(represented as786cbecause it illustrates a specific exemplary segment of tblQryFld786), which are related to record901b, wherein record901bis illustrated in an exemplary segment of tblQrySrc784(represented as784cbecause it illustrates a specific exemplary segment of tblQrySrc784). The record illustrated in786ccomprises a column of tblBrands, which is comprised by record901b, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object gryA.

FIG. 9Dillustrates exemplary records from tblQryFld786(represented as786dbecause it illustrates a specific exemplary segment of tblQryFld786) which are related to record901c, wherein record901cis illustrated in an exemplary segment of tblQrySrc784(represented as784dbecause it illustrates a specific exemplary segment of tblQrySrc784). The record illustrated in786dcomprises a column of tblOrigins, which is comprised by record901c, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object gryA.

FIG. 9Eillustrates an exemplary segment of tblQry782(represented as782ebecause it illustrates a specific exemplary segment of tblQry782) which shows an exemplary source object which is identifiable by gryPur (a data value which represents qryId732), hereinafter called exemplary source object gryPur, and is represented in record902. The exemplary source object gryPur is utilized in another source object, which is identifiable by gryUnion (a data value which represents qryId732), hereinafter called the exemplary source object gryUnion, illustrated inFIG. 9G. However, queryBuilder can construct a desired query by utilizing only the exemplary source object gryPur.

An exemplary segment of tblQrySrc784(represented as784ebecause it illustrates a specific exemplary segment of tblQrySrc784) comprises one record902awhich is related to record902. Record902aillustrates a table which is to be utilized in a desired query that is to be constructed by utilizing the exemplary source object qryPur and/or any other query, which queryBuilder constructs by utilizing a source object, which utilizes the exemplary source object qryPur.

In record902a, srcUseCnd516is represented by an exemplary token value comprising a list of comma separated string comprising two string values: TknPur and TknZon. Utilization of srcUseCnd516implies that during the construction of a desired query which utilizes the exemplary source object gryPur, record902awill be utilized only if the parameter value162of prmUseCnd622comprises at least one of the string values: TknPur and TknZon. In a case where record902ais not utilized, the records illustrated in an exemplary segment of tblQryFld786(represented as786ebecause it illustrates a specific exemplary segment of tblQryFld786) will also not be utilized.

Record902bwill be utilized only if record902ais utilized. Record902cwill be utilized only if srcUseCnd516comprises a string value TknZon. Record902dwill be utilized only if srcUseCnd516comprises a string value TknPur. Record902ewill be utilized only if srcUseCnd516comprises a string value TknSal. The string value TknSal is not included in record902abecause record902aand its related records902b,902c,902d, and902eare not desired to be utilized for constructing a desired query if the parameter value162of srcUseCnd516comprises string value TknSal, but does not comprise any of the string values: TknPur and TknZon.

In records902dand902e, % TknMth %, which is a token value representing tknMonth524, is embedded in the component value representing colAla762.

In record902d, colXpr764comprises an exemplary token value154% TknMth,!purchaseMonth,!Amount,0% which represents tknMonth524, wherein the token value representing tknMonth524also comprises two instances of “!” (sign of exclamation without quotes), which is a token value154representing tknAlias522. This exemplary implementation illustrates a nesting of a token value representing tknAlias522in another token value representing tknMonth524. The arguments purchaseMonth and Amount, which are utilized in colXpr764of record902d, are column names of tblPurchases, and 0 is a constant value.

In records902dand902e, col Reuse520is represented by an exemplary data value True. This implies that records902dand902ewill be utilized for constructing a desired query if utilized on the basis of colUseCnd518, as many times as specified by the parameter value162of prmMthCnt614. In a case where the parameter value162of prmMthCnt614is zero, records902dand902ewill be utilized only once.

FIG. 9Fillustrates an exemplary segment of tblQry782(represented as782fbecause it illustrates a specific exemplary segment of tblQry782) which shows an exemplary source object which is identifiable by qrySal (a data value which represents qryId732), hereinafter called the exemplary source object qrySal, and represented in record903. The exemplary source object qrySal is utilized in another source object, identifiable by the exemplary source object qryUnion, which is illustrated inFIG. 9G. However, queryBuilder can construct a desired query by utilizing only the exemplary source object qrySal.

An exemplary segment of tblQrySrc784(represented as784fbecause it illustrates a specific exemplary segment of tblQrySrc784) comprises one record903awhich is related to record903. Record903aillustrates a table, which is to be utilized in a desired query that is to be constructed by utilizing the exemplary source object qrySal, and/or any other query, which queryBuilder constructs by utilizing a source object, which utilizes the exemplary source object qrySal.

In record903a, srcUseCnd516is represented by an exemplary token value comprising a list of comma separated string comprising two string values; TknSal and TknZon. The utilization of srcUseCnd516implies that during the construction of a desired query which utilizes the exemplary source object qrySal, record903awill be utilized only if the parameter value162of prmUseCnd622comprises at least one of the string values: TknSal and TknZon. In a case where record903ais not utilized, the records illustrated in an exemplary segment of tblQryFld786(represented as786fbecause it illustrates a specific exemplary segment of tblQryFld786) will also not be utilized.

Record903bwill be utilized only if record903ais utilized. Record903cwill be utilized only if srcUseCnd516comprises a string value TknZon. Record903dwill be utilized only if srcUseCnd516comprises a string value TknSal. Record903ewill be utilized only if srcUseCnd516comprises a string value TknPur. The string value TknPur is not included in record903abecause record903a, and its related records903b,903c,903d, and903e, are not desired to be utilized for constructing a desired query if the parameter value162of srcUseCnd516comprises a string value TknPur, but does not comprise any of the string values: TknSal and TknZon.

In records903dand903e, % TknMth %, which is a token value representing tknMonth524, is embedded in the component value stored in colAla762.

In record903e, colXpr764comprises an exemplary token value % TknMth,!saleMonth,!Amount,0% which represents tknMonth524, wherein the token value representing tknMonth524also comprises two instances of “!” (sign of exclamation without quotes), which is a token value154representing tknAlias522. This exemplary implementation illustrates a nesting of a token value representing tknAlias522in another token value representing tknMonth524. The arguments saleMonth and Amount, which are utilized in colXpr764of record903d, are column names of tblSales, and 0 is a constant value.

In records903dand903e, col Reuse520is represented by an exemplary data value True. This implies that records903dand903ewill be utilized for constructing a desired query if utilized on the basis of colUseCnd518, as many times as specified by the parameter value162of prmMthCnt614. In a case where the parameter value162of prmMthCnt614is zero, records903dand903ewill be utilized only once.

FIG. 9Gillustrates an exemplary segment of tblQry782(represented as782gbecause it illustrates a specific exemplary segment of tblQry782) which shows an exemplary source object identifiable by a data value qryUnion, which represents qryId732, and is stored in record904.

In record904, qryUni514is represented by an exemplary token value True, which implies that a desired query, which is constructed by utilizing the exemplary source object qryUnion, will be a union query. Record904has two related records illustrated in an exemplary segment of tblQrySrc784(represented as784gbecause it illustrates a specific exemplary segment of tblQrySrc784). If both the exemplary records of784g, record904aand record904b, are utilized, then the desired query constructed by utilizing the exemplary source object qryUnion will be a union query which will utilize UNION ALL operator.

In record904a, srcReuseId738is represented by a data value qrySal, which specifies that the exemplary source object qrySal will be utilized, as a view, whenever the record904awill be utilized for constructing a desired query. A data value, qrySale, which represents srcId754of record904a, is an exemplary arbitrary name given to a desired query, which is constructed by utilizing the exemplary source object qrySal.

In record904b, srcReuseId738is represented by a data value qryPur, which specifies that the exemplary source object qryPur will be utilized, as a view, whenever record904bwill be utilized for constructing a desired query. A data value qryPurchase, which represents srcId754of record904b, is an exemplary arbitrary name given to a desired query, which is constructed by utilizing the exemplary source object qryPur.

FIG. 9Hillustrates an exemplary segment of tblQry782(represented as782hbecause it illustrates a specific exemplary segment of tblQry782) which shows an exemplary source object identifiable by a data value qryGroup, hereinafter called the exemplary source object qryGroup, which represents qryId732, and is in record905.

In record905, qryGrp512is represented by an exemplary token value True, which implies that the desired query constructed by utilizing the exemplary source object qryGroup will be an aggregate query. Record905has one related record illustrated in an exemplary segment of tblQrySrc784(represented as784hbecause it illustrates a specific exemplary segment of tblQrySrc784), which is represented by record905a.

Record905ahas four related records illustrated in an exemplary segment of tblQryFld786(represented as786hbecause it illustrates a specific exemplary segment of tblQryFld786). In records905band905c, colGrpFun766is represented by a component value “Group” (without quotes), which implies that the columns mentioned by records905band905cwill be utilized in GROUP BY clause of a desired query, which is constructed by utilizing the exemplary source object qryGroup. In records905dand905e, colGrpFun766comprises an exemplary component value “SUM” (without quotes), which implies that SUM function will be applied on the columns mentioned by records905dand905ein a desired query which is constructed by utilizing the exemplary source object qryGroup.

FIG. 9Iillustrates an exemplary segment of tblQry782(represented as782ibecause it illustrates a specific exemplary segment of tblQry782) which shows an exemplary source object, identifiable by qryFinal (a data value representing qryId732), hereinafter called the exemplary source object qryFinal, which is represented in record906.

Record906has five related exemplary records illustrated in an exemplary segment of tblQrySrc784(represented as784ibecause it illustrates a specific exemplary segment of tblQrySrc784), which are represented by records906a,906b,906c,906d, and906e. The five exemplary records illustrated in784irepresent four tables and one view, which may be utilized in a desired query which is constructed by utilizing the exemplary source object qryFinal. In784i, each of records906a,906b,906c, and906ecomprises a definition of one table which may be utilized, on the basis of the token value representing srcUseCnd516of each respective record and the parameter value162of prmUseCnd622, in a query which is constructed by utilizing the exemplary source object qryFinal. Record906dcomprises a definition of a view, specified by “qryGroup” (without quotes), which is a data value representing srcReuseId738, and which may be utilized, on the basis of the token value representing srcUseCnd516of its respective record and the parameter value162of prmUseCnd622, in a desired query which is constructed by utilizing the exemplary source object qryFinal.

FIG. 9Jillustrates records of tblQryFld786(represented as786jbecause it illustrates a specific exemplary segment of tblQryFld786) which are related to record906a, which is illustrated in an exemplary segment of tblQrySrc784(represented as784jbecause it illustrates a specific exemplary segment of tblQrySrc784). The records illustrated in786jspecify columns of tblItems, which is comprised by record906a, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.

FIG. 9Killustrates a record of tblQryFld786(represented as786kbecause it illustrates a specific exemplary segment of tblQryFld786) which is related to record906b, illustrated in an exemplary segment of tblQrySrc784(represented as784kbecause it illustrates a specific exemplary segment of tblQrySrc784). The record illustrated in786kspecifies a column of tblBrands, which is comprised by record906b, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.

FIG. 9Lillustrates a record of tblQryFld786(represented as786lbecause it illustrates a specific exemplary segment of tblQryFld786) which is related to record906c, illustrated in an exemplary segment of tblQrySrc784(represented as784lbecause it illustrates a specific exemplary segment of tblQrySrc784). The record illustrated in786lspecifies a column of tblOrigins, which is comprised by record906c, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.

FIG. 9Millustrates records of tblQryFld786(represented as786mbecause it illustrates a specific exemplary segment of tblQryFld786) which are related to record906d, illustrated in an exemplary segment of tblQrySrc784(represented as784mbecause it illustrates a specific exemplary segment of tblQrySrc784). The records illustrated in786mspecify columns of qryGroupSrc, which is comprised by record906d, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.

FIG. 9Nillustrates a record of tblQryFld786(represented as786nbecause it illustrates a specific exemplary segment of tblQryFld786) which is related to record906e, illustrated in an exemplary segment of tblQrySrc784(represented as784nbecause it illustrates a specific exemplary segment of tblQrySrc784). The record illustrated in786nspecifies a column of tblZones, which is comprised by record906e, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.

FIG. 9Oillustrates an exemplary segment of tblQry782(represented as7820because it illustrates a specific exemplary segment of tblQry782) which shows an exemplary source object, identifiable by qryModify (a data value representing qryId732), hereinafter called the exemplary source object qryModify, which is represented in record907.

In record907, qryWhr752is represented by an exemplary WHERE clause expression, wherein the exemplary WHERE clause expression is embedded with token values representing tknCurlyBrackets526, tknItemCodeBegin528, and tknItemCodeEnd530. Record907has one related exemplary record illustrated in an exemplary segment of tblQrySrc784(represented as784obecause it illustrates a specific exemplary segment of tblQrySrc784), which is represented by record907a.

Record907ahas ten related records, which are illustrated in an exemplary segment of tblQryFld786(represented as786obecause it illustrates a specific exemplary segment of tblQryFld786). In records907band907c, colUseCnd518is represented by an exemplary token value “TknItm” (without quotes), which is utilized to enable the utilization of records907band907cfor constructing a desired query, which is constructed by utilizing the exemplary source object qryModify optionally on the basis of the parameter value162of prmUseCnd622.

FIGS. 10A to 10Zillustrate a few exemplary desired queries constructed by queryBuilder, which is illustrated inFIGS. 8A to 8P, by utilizing one or more source objects, illustrated inFIGS. 9A to 9O. It is to be noted that only a few exemplary queries are illustrated inFIGS. 10A to 10Z. Queries which can be constructed by utilizing different combinations of parameters, which are illustrated inFIG. 6, and source objects, which are illustrated inFIGS. 9A to 9O, can be in the hundreds of thousands, and can be constructed instantly at runtime. In the prior art, the construction of queries in such numbers will require millions of man hours.

FIG. 10Aillustrates an exemplary desired query1012awhich is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified inFIG. 10A.

FIG. 10Billustrates an exemplary desired query1012bwhich is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified inFIG. 10B.

FIG. 10Cillustrates an exemplary desired query1012cwhich is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified inFIG. 10C.

FIG. 10Dillustrates an exemplary desired query1012dwhich is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified inFIG. 10D.

FIG. 10Eillustrates an exemplary desired query1012ewhich is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified inFIG. 10E.

FIG. 10Fillustrates an exemplary desired query1012fwhich is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified inFIG. 10F.

FIG. 10Gillustrates an exemplary desired query1012gwhich is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified inFIG. 10G.

FIG. 10Hillustrates an exemplary desired query1012hwhich is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified inFIG. 10H.

FIG. 10Iillustrates an exemplary desired query1012iwhich is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified inFIG. 10I.

FIG. 10Jillustrates an exemplary desired query1012jwhich is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified inFIG. 10J.

FIG. 10Killustrates an exemplary desired query1012kwhich is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified inFIG. 10K.

FIG. 10Lillustrates an exemplary desired query1012lwhich is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified inFIG. 10L.

FIG. 10Nillustrates an exemplary desired query1012mwhich is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified inFIG. 10M.

FIG. 10Pillustrates an exemplary desired query1012owhich is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified inFIG. 10O.

FIG. 10Qillustrates an exemplary desired query1012qwhich is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified inFIG. 10Q.

FIG. 10Rillustrates an exemplary desired query1012rwhich is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified inFIG. 10R.

FIG. 10Sillustrates an exemplary desired query1012swhich is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified inFIG. 10S.

FIG. 10Tillustrates an exemplary desired query1012twhich is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified inFIG. 10T.

FIG. 10Uillustrates an exemplary desired query1012uwhich is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified inFIG. 10U.

FIG. 10Villustrates an exemplary desired query1012vwhich is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified inFIG. 10V.

FIG. 10Xillustrates an exemplary desired query1012wwhich is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified inFIG. 10W.

FIG. 10Zillustrates an exemplary desired query1012ywhich is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified inFIG. 10Y.

12. Concluding Remarks on Embodiments and Drawings

The present invention, although described above with reference to a few embodiments, may be embodied in numerous forms, too many to describe herein, and should not be limited by the above described exemplary embodiments, which are illustrative of the present invention, but not exhaustive. Accordingly, the invention is not to be considered limited to the specific examples and embodiments which have been described for the purpose of disclosure. Many alternatives, modifications, and variations will be apparent to those skilled in the art in the light of the above teaching. Accordingly, the invention is intended to embrace all alternatives, modifications, and variations that fall within the spirit and broad scope of the attached claims.

The embodiments of the invention can be implemented in a computing hardware (computing apparatus) and/or software, which may include, but is not limited to, any computer or machine which can store, retrieve, process and/or output data, and/or communicate with other computers or machines, and any type of software, such as, computing system environment300ofFIG. 3.

A software/computer program which implements the embodiments may be provided by any computer readable recording media, and may be recorded on any volatile and/or non-volatile memory. The software/computer program which implements the embodiments may also be transmitted over a transmission communication media which may include, but are not limited to, a carrier-wave signal, and an optical signal, etc.

The invention can also be implemented in digital electronic circuitry or in computer hardware, firmware, software and/or in any combinations thereof. The present invention can be implemented in a computer program product tangibly embodied in a machine readable storage device, or a machine for an execution by a programmable processor. The method of the present invention can be performed by a programmable processor executing a program of instructions to perform the functions of the invention.

The attached claims are to be read to include not only the elements or any combinations thereof which have been literally set forth above, but also all possible equivalent elements for effectively performing the same function in practically the same way to obtain substantially the same result. Therefore, the claims are to be understood to include what is specifically illustrated and described above, what is conceptually equivalent, and also what incorporates the essential idea and principles of the invention. The appended claims are intended to cover all such features and advantages of the embodiments, and their equivalents, that fall within the true spirit and scope thereof.

13. A Few Benefits and Commercial Applications of the Invention

The benefits and advantages of this invention are numerous and overwhelming, and can readily be achieved in most computer programs. This invention also has huge commercial potential. Any commercial application based on this invention will have power and functionality well beyond what can be achieved in the prior art. Even existing commercial products and applications, like computer programs, can be made extremely powerful, flexible, dynamic, feature rich and cost effective by utilizing this invention. Utilization of this invention will open new horizons in software development and take it to a new programming paradigm which will be beneficial for software developers as well as software users.

It will be apparent to anyone familiar with the art that this invention can readily be applied/utilized in almost every aspect of software development, particularly in almost any computer program, existing or new.

This invention will enable development of software which can easily develop software components on a user's demand, as and when required.

This invention will greatly simplify and streamline the development of software. Most of the complexities currently faced by software developers will be wiped out. This will lead to another vital advantage: extensive training of human beings for software development will no longer be required. As a result, productivity of human beings will be greatly enhanced, and result in substantial cost savings in terms of finance and time.

The streamlining and simplification of software development achieved under this invention will particularly reduce the time presently required for software development. The time required to develop a software program under this invention will only be a very small fraction of the time required in the prior art. For example:1. By utilizing this invention, development of database queries can be made so simple and efficient that it can save hundreds of thousands of man hours for even a medium-size computer program.2. The innovative source object repository of the invention can make software development so simple and easy that even a novice software developer will be able to produce such outstanding results in only a few minutes that, in the prior art, a highly skilled professional software developer could not produce in months.

By utilizing this invention, creating and managing database queries will become extremely efficient and cost effective. Hundreds of thousands of man hours of query writing, query testing, and query debugging can be saved for even one computer program. This will make creating, managing, maintaining, modifying, as well as providing quality assurance of database queries substantially easier than in the prior art. The extraordinary ease in query building will particularly benefit software developers.

The inventive concepts of a source object repository, a software component constructor, reusability, a data token, and a parameter will make it possible to substantially reduce the quantum of queries which, in the prior art, may span hundreds of thousands of query lines. Software development in general, and business intelligence in particular, will greatly benefit from such reduction. A few possibilities under this invention are discussed below:1. Database queries: This invention can substantially improve creating, testing, and debugging database queries in any database management system and/or any computer program which utilizes database queries.2. Reporting: Reporting is an important segment of any computer program. Application of this invention to a reporting computer program will enable a computer to generate millions of report layouts, along with respective database queries, from a single source object.3. Data entry forms: This invention will allow development of data entry forms which can be customized either at runtime and/or according to a user's requirements. It will also become possible to develop business applications which can be utilized and deployed in one or more different industries, across one or more different regions/countries having different laws and environments.4. Business processing rules: Business processing rules are one of the most significant parts of a computer program. The business processing rules vary greatly from one industry to another, and also from one country to another. For this reason, many computer programs which rely heavily on business processing rules, such as payroll processing, tax calculation, and the like, can only be developed for specific industries and/or regions. This invention makes it possible to develop computer programs that are utilizable in cross industry and in cross region.5. Software configuration: One of the most time-consuming and resource-hungry phases in software deployment is software configuration according to a user's requirements. Even small business applications take months to deploy. The present invention enables development of computer programs that can be configured and deployed in a fraction of the time required in the prior art.6. The invention can similarly be applied to a user management system, an error management system, a help system, a user interface, a software wizard, a gaming engine, etc.

This invention can be utilized in almost every type of software program and application. Therefore, it is next to impossible to list all possible applications of the present invention. However, some exemplary commercial applications and usages are mentioned below:1. Business intelligence based computer programs utilize many software components, such as, a database query, a report layout, a user interface, a user management system, and the like. This invention can be applied to all these components. However, by applying this invention only to database queries and report layouts, the business intelligence computer programs can be made hundreds of times more powerful, intelligent, and economical. The current invention will open up new possibilities in data analysis and reporting which are impossible to achieve, or even conceive, in the prior art.2. This invention can also be utilized to enhance the productivity and functionality of existing business intelligence computer programs such as CRYSTAL REPORTS, COGNOS, and the like, to a level that is unachievable in the prior art.3. Given below are a few software application categories which can benefit from the present invention in terms of power, flexibility, dynamism, and cost effectiveness:a. Business intelligence.b. Database management system.c. CRM (Customer Relationship Management) software.d. ERP (Enterprise Resource Planning) software.e. SCM (Supply Chain Management) software.f. GIS (Geographical Information System) software.g. DAM (Digital Asset Management) software.h. MRP (Material Requirements Planning) software.i. SFA (Sales Force Automation) software.j. CAE (Computer Aided Engineering) software.k. CAD (Computer Aided Design) software.l. Hotel management software.m. Human resource management software.n. Banking software.o. Web based applications.p. Manufacturing control systems.q. Process control systems.

This invention makes it possible for a developed computer program, and its related resources, to be utilized, as many times as may be desired, in another computer program. Anyone familiar with the art will immediately capitalize on this advantage. For example, if a query building engine (which is a software component constructor) is developed on the basis of this invention, it can be utilized in any other computer program. By only porting the query building engine to any other platform, all the queries written by the query building engine can readily be utilized on other platforms.

The innovative software component constructor, which is developed on the basis of this invention, can easily be utilized for constructing billions and trillions of different software components, even from a single source object. This gives software development new potential which is unthinkable in the prior art.

Under this invention, the benefits of reusability and multiplicity of instantly available software components will be readily available for almost all software components, such as, reports, data entry forms, business processing rules, error management systems, knowledge base systems, web portals, computer games, and the like.

This invention makes it possible to develop software components in small pieces and test each piece individually and independently. This possibility enables a software developer to manage a computer in a way that each piece of a software component is developed and tested independently, and then all the pieces of the software component are combined together to work as a single software component. This power is achieved by utilizing the innovative source object repository, data tokens and reusability of one or more component values.

This invention enables creation of software factories which work as real factories thus making software industrialization a reality.

In the prior art, most computer programs are developed in a way that they have to be maintained at a huge cost in terms of time, human effort and financial resources. However, this invention makes maintenance of software so convenient and easy that is unimaginable in the prior art. Moreover, this invention teaches a software developer to develop software in such a manner that maintaining developed software is hassle-free and no more than a minor routine. For example, if a conventionally developed computer program utilizes a couple of hundred queries based on one database table, adding a new column in each database query may require tens of thousands of man hours. But, in a similar computer program which is developed on the basis of this invention, such a change will require only a few minutes.

In the prior art, the ability to develop software which is platform independent has been an ongoing challenge which has not been met effectively. This invention enables this ability to such a level that is unheard of in the prior art. By utilizing this invention, it is possible to develop a software component constructor which can construct software components for a plurality of platforms. For example, a reporting engine, which is a software component constructor, can be developed under this invention that can construct report layouts for CRYSTAL REPORTS, MICROSOFT ACCESS, and many other reporting programs from a single source object.

Software developed by utilizing this invention utilizes the available computing resources efficiently. Storage requirements for a computer program developed on the basis of this invention is substantially smaller than the storage requirements for a similar computer program developed according to the conventions used in the prior art. Moreover, utilization of network bandwidth is also optimized because of the much reduced size of the computer program developed under this invention. Hence, it is extremely efficient to deploy computer programs developed under this invention, in networked and/or web based environments, such as cloud computing, client server architecture, and the like.

Software which is developed on the basis of this invention is also inherently resource efficient in terms of software support to a user. Because of the inherent architecture of such software, it is possible to upgrade and maintain such software very efficiently and at an extremely low cost. The resources required to support computer programs developed by utilizing this invention are only a fraction of the resources required to support similar programs developed in the prior art.

Utilization of this invention for software development will enable optimization for minimizing the software development resources and maximizing the software efficiency, flexibility and/or output, and will enable a user to have: (1) precise control, (2) dynamic change, and/or (3) any combinations thereof, in: (i) the behavior of software, (ii) the outcome of software, (iii) the reusability of program data, (iv) the ease of software development, and/or (v) any combinations thereof; and all of the above, especially: (a) at runtime and/or (b) by utilization of one or more control parameters.

Software developed on the basis of this invention also gives unmatched runtime power, flexibility, and dynamism to a user. Utilization of a source object repository, a data token, and a parameter enables developed software to also work as an intelligent component constructor which can instantly construct a software component on the basis of a user's desire at runtime; indeed, the user may utilize the developed software according to the ever-changing and growing business requirements. For example, it is possible, under this invention, to develop a reporting system which can produce almost any conceivable data combination instantly on a user's demand. Such possibilities are inconceivable in the prior art.

By utilizing this invention, it is possible to create computer programs which can cater to almost any future requirement, only by either changing one or more parameters, or by adding new component values, data tokens and/or parameters, as may be pertinent for any new/future requirement.

Since any software, developed on the basis of this invention, is very easy to maintain, it is possible to extend the life cycle of developed software by many years.

In a nutshell, this invention is a unique and breakthrough development. It will provide total flexibility and dynamism to a software developer and user in software development, especially at runtime. Moreover, this invention will cater to the complex and massive demands on software, precipitated by the exponential growth of computing power, accounting for both the current and future requirements. Indeed, the invention is unique in its nature and scope, and no similar prior art exists in this regard.