WO2013041930A1 - A method and an apparatus for developing software - Google Patents

A method and an apparatus for developing software Download PDF

Info

Publication number
WO2013041930A1
WO2013041930A1 PCT/IB2012/001736 IB2012001736W WO2013041930A1 WO 2013041930 A1 WO2013041930 A1 WO 2013041930A1 IB 2012001736 W IB2012001736 W IB 2012001736W WO 2013041930 A1 WO2013041930 A1 WO 2013041930A1
Authority
WO
WIPO (PCT)
Prior art keywords
value
component
token
utilized
source
Prior art date
Application number
PCT/IB2012/001736
Other languages
French (fr)
Inventor
Ahmad RAZA
Original Assignee
AHMED, Sheikh Afzaal
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by AHMED, Sheikh Afzaal filed Critical AHMED, Sheikh Afzaal
Priority to JP2014531324A priority Critical patent/JP5972381B2/en
Priority to CA2849592A priority patent/CA2849592A1/en
Priority to CN201280057919.3A priority patent/CN104169871B/en
Priority to EP12779156.4A priority patent/EP2758873B1/en
Publication of WO2013041930A1 publication Critical patent/WO2013041930A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven

Definitions

  • This invention relates to the field of software development.
  • 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.
  • a new method for developing software 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).
  • 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.
  • a method 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.
  • a method 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.
  • FIG. 1 A illustrates a flowchart representing an aspect of an embodiment of the invention.
  • FIG. 1 B illustrates a flowchart representing an aspect of an embodiment of the invention in more detail.
  • FIG. 2 illustrates a flowchart representing an exemplary construction of an exemplary software component, according to an aspect of an embodiment of the invention.
  • FIG. 3 is an exemplary illustration of a schematic diagram of a computing system environment inclusive of an exemplary computer and other exemplary components which are suitable for implementing an aspect of an embodiment of the invention.
  • Fig. 4A illustrates two exemplary sets of predetermined rules which are selected according to an aspect of an embodiment of the invention.
  • Figs. 4B to 4K illustrate an exemplary syntax diagram of a set of predetermined rules for ACCESS SELECT QUERY, selected according to an aspect of an embodiment of the invention.
  • Figs. 4L to 4R illustrate an exemplary syntax diagram of a set of predetermined rules for ORACLE SELECT QUERY, selected according to an aspect of an embodiment of the invention.
  • Fig. 4S illustrates an exemplary block diagram which shows a few source components, illustrated in Figs. 4B to 4R, which are categorized as indeterminable source components according to an aspect of an embodiment of the invention.
  • Fig. 4T illustrates an exemplary block diagram which shows a few source components, illustrated in Figs. 4B to 4R, which are categorized as determinable source components according to an aspect of an embodiment of the invention.
  • Fig. 5A illustrates an exemplary block diagram which shows a few exemplary data tokens which are defined according to an aspect of an embodiment of the invention.
  • FIGs. 5B and 5C illustrate an exemplary flowchart which shows an exemplary set of data token rules of an exemplary specific data token, according to an aspect of an embodiment of the invention.
  • Fig. 6 illustrates an exemplary block diagram which shows exemplary parameters which are defined according to an aspect of an embodiment of the invention.
  • Fig. 7A illustrates an exemplary block diagram which shows a few exemplary attributes (may be called columns or fields as well), for a data model, which are to be included in source object repository to hold component values for desired indeterminable source components out of all indeterminable source components illustrated in the FIG. 4S, according to an aspect of an embodiment of the invention.
  • Fig. 7B illustrates an exemplary data model which is sufficient for creating a source object repository, according to an aspect of an embodiment of the invention.
  • Fig. 7C illustrates an exemplary source object repository which is created on the basis the exemplary data model, illustrated in Fig. 7B, according to an aspect of an embodiment of the invention.
  • FIGs. 8A to 8P illustrate an exemplary flowchart of an exemplary software component constructor, called queryBuilder in this document, according to an aspect of an embodiment of the invention.
  • Fig. 8Q illustrates an exemplary flowchart of an exemplary processing of an exemplary specific data token, according to an aspect of an embodiment of the invention.
  • Fig. 8R illustrates an exemplary flowchart of an exemplary processing of another exemplary specific data token, according to an aspect of an embodiment of the invention.
  • Fig. 8S illustrates an exemplary flowchart of an exemplary function which is utilized by queryBuilder.
  • Figs. 8T to 8X illustrate an exemplary flowchart of the exemplary data token whose processing logic is illustrated in Figs. 5B and 5C, according to an aspect of an embodiment of the invention.
  • Figs. 9A to 90 illustrate a few exemplary source objects which are stored in the exemplary source object repository illustrated in Fig. 7C, according to an aspect of an embodiment of the invention.
  • Figs. 10A to 10Z illustrate a few exemplary queries which are constructed by queryBuilder by utilizing the few exemplary source objects illustrated in Figs. 9A to 90, according to an aspect of an embodiment of the invention.
  • 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” 142 refers 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," wherein 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 component 142 may include, but are not limited to:
  • An SQL query is a software component.
  • a WHERE clause of an SQL query is a software component.
  • a report layout is a software component.
  • a software object created on a basis of a class model is a software component.
  • a font object is a software component.
  • a data structure is a software component.
  • a database view is a software component.
  • a database table is a software component.
  • a data entry form is a software component.
  • a spreadsheet is a software component.
  • Examples of a software component 142 comprising another software may include, but are not limited to:
  • An SQL query which is a software component, comprising a WHERE clause, which is also a software component.
  • An SQL view which is a software component, comprising two SQL views, which are also software components.
  • a report layout which is a software component, comprising a font object, which is also a software component.
  • a "source component” 144 is represented by at least one data value, hereinafter called component value 146, in a software component 142.
  • a source component 144 is just like a property of a software object, whereas a component value 142 is just like the value of the property of the software object.
  • Examples of a source component 144 may include, but are not limited to:
  • 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" x 11 ".
  • 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.
  • 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.
  • 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.
  • a tax rate is a source component of a tax calculation business rule, which is a
  • the tax rate may be represented by a component value of a numeric data type.
  • 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" 140 comprises 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 rules 140 may include, but are not limited to:
  • a set of predetermined rules for creating an SQL query which is a software
  • a set of predetermined rules for creating an SQL query which is a software
  • a set of predetermined rules for creating a form which is a software component, in
  • a set of predetermined rules for creating a report layout which is a software
  • a set of predetermined rules for calculating the premium of a specific insurance policy in a software application which is a software component.
  • 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" 152 comprises a set of data token rules 158 and is represented by a data value, hereinafter called token value 154, 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 result 156, 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.
  • tknCompare is a data token 152 which is represented by a token value Comp(A,B).
  • Comp(A,B) When Comp(A,B) is processed according to its set of data token rules, 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 are may be determined by utilizing two parameter values:
  • the token value of the data token tknCompare acts like a function which returns one of the three possible values 1 , 0, or -1.
  • "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 constructor 170 to generate an appropriate report on the basis of the values of "A" and "B".
  • tknRetrieve is a data token 152 which is represented by a token values tknDept().
  • a set of data token rules for processing tknRetrieve specifies that the token value tknDept() is processed in such a manner that it returns all department codes from a database table called tbl Department, 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.
  • tknRetrieve Since number of departments may vary from time to time, tknRetrieve enables a software component constructor 170 to create an appropriate query, at runtime, on the basis of departments returned as a token result 156 when tknDept(), token value 154 of tknRetrieve, is processed.
  • JoinType is a data token 152 which is utilized for constructing a SELECT query, which is a software component.
  • 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 token value 154 of tknJoinType may be retrieved by utilizing a parameter value 162 obtained from a user at runtime and an SQL query may be constructed by a software component constructor 170 accordingly.
  • source object" 166 comprises: omponent value 146,
  • a "software component constructor” 170 is a computer program which is sufficient for constructing a software component 142, or a part thereof, on the basis of a set of predetermined rules 140 and by utilizing a source object 166, a component value 146, a token value 154, a token result 156, or any combinations thereof, wherein a source object 166, a component value 146, and/or a token value 154 may be determined by utilizing a parameter value 162.
  • 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.
  • a query builder a software component constructor, which constructs SQL queries for DB2, MICROSOFT ACCESS, MICROSOFT SQL Server, ORACLE, and/or SYBASE
  • a software component constructor 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” 168 comprises one or more data structures and is utilized for storing a source object 166 in 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:
  • 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.
  • Creation, utilization, association, and/or processing of a data token is defined as creation, utilization, association, and/or processing of a token value of the data token.
  • Utilization of a parameter is defined as utilization of a parameter value of the parameter.
  • a human being cannot work around the clock and is limited by the speed at which he/she can operate.
  • 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.
  • Fig. 1 A is an exemplary flowchart that illustrates as aspect of an embodiment of the invention.
  • a source object repository 168 is created.
  • a source code repository 168 is utilized to store one or more source objects 166 hearing comprising one or more token values 154 n and/or one or more component values 146 hatch which represent one or more indeterminable source components 148 n .
  • a source object repository 168 is based on a data model 164 which is created for a software component on the basis of rules based upon which a software component is written and/or developed.
  • a data model for an SQL query will base on the syntax of the SQL query.
  • a data model for a report layout in CRYSTAL REPORTS will base on the object model for reports exposed by CRYSTAL REPORTS.
  • a source object repository 168 is created on the basis of a data model 164.
  • a data model 164 is created on the basis of a set of predetermined rules 140 of a software component 142 (a software source code) and by utilizing one or more indeterminable source components 148 flick. [0074] According to an aspect of an embodiment of the invention, following steps are taken for creating a data model 164:
  • a set of predetermined rules 140 is selected, wherein the selected set of
  • predetermined rules 140 is defined terms of one or more source components 144 n .
  • Each of the one or more source components 144 n is categorized into one of the following categories:
  • a data model 164 is created on the basis of the selected set of predetermined rules
  • a data model 164 enables reusability of a source object 166, a data token value 154, and/or a component value 146.
  • source components 144 n of a software component (software source code) 142 are categorized in indeterminable source components 148 radical. and determinable source components 150 radical, wherein
  • the staring command, which is a source component 144, of an SQL query is determinable source component 150 if the SQL query is to be utilized for viewing records from a database, because such query always starts with command "SELECT".
  • the staring command, which is a source component 144, of the SQL query is an indeterminable source component 148, 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 component 150 because of the rules for writing queries for viewing records from a database.
  • the starting command will be an indeterminable source component 148 because of the rules for writing queries for updating, inserting, viewing, and/or removing records from a database.
  • a software component constructor (source code generator) 170 which is a computer program, is created.
  • a software component constructor 170 is utilized for constructing (generating) one or more software components 144 n .
  • a software component constructor 170 may be utilized for generating (constructing) an invoice entry form, which is a software component 142, at runtime according to a user's requirements which are specified by utilizing one or more parameters 160 radiation.
  • a software component constructor 170 retrieves one or more source objects 166 n from one or more source object repositories 168 tone for constructing one or more software components 142 n .
  • a software component constructor 170 accepts one or more parameter values 162 n from a user at runtime for constructing one or more software components 142 broadcast.
  • a software component constructor 170 accepts a parameter value 162 at a user interface level of a computer program.
  • a software component constructor 170 is utilized for constructing one or more software components 142 tunnel at runtime.
  • a software component 142 is constructed by a software component constructor 170 which utilizes a source object 166 which is created, before constructing the software component 142, and stored in a source object repository 168.
  • a source object 166 can be utilized, with a parameter 160, for constructing a plurality of software components 142 broadcast. 8.
  • a parameter 160 for constructing a plurality of software components 142 broadcast.
  • Fig. 1 B is an exemplary flowchart that illustrates operations 20, 30, and 40 of Fig. 1A in greater detail, according to an aspect of an embodiment of the invention.
  • a "set of predetermined rules 140" is selected, wherein the set of predetermined rules 140 is sufficient for constructing a "software component 142", wherein the software component 142 is a software component that is desired to be constructed.
  • the set of predetermined rules 140 may be adapted as may be desired as long as a predetermined rule in the set of predetermined rules 140 is not violated to an extent where the software component 142 cannot be constructed on the basis of the adapted set of predetermined rules.
  • the plurality of software components 142 n can be constructed on the basis of one or more sets of predetermined rules 140 refrain.
  • a set of predetermined rules 140 for constructing a SELECT query which is a
  • a set of predetermined rules 140 for constructing a SELECT query which is a
  • a set of predetermined rules 140 for constructing a SELECT query which is a
  • a set of predetermined rules 140 for constructing a report layout which is a software component 142, in CRYSTAL REPORTS.
  • a set of predetermined rules 140 for creating a computer program which is a
  • a software component 142 for processing the payroll of a specific business entity. 6.
  • a set of predetermined rules 140 for creating a software module which is a software component 142, for calculating sales tax in accordance with a specific country's tax laws.
  • a set of predetermined rules 140 for creating a data entry form which is a software component 142, in MICROSOFT VISUAL BASIC 6 environment.
  • a set of predetermined rules 140 for constructing a SELECT query which is a
  • a set of predetermined rules 140 for constructing a report layout which is a software component 142, in MICROSOFT ACCESS is adapted in a manner that the name of every textbox in the report layout starts with letters "txt", without quotes.
  • a set of predetermined rules 140 for creating a software module which is a software component 142, 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.
  • sub-operation 110a illustrates that the set of predetermined rules 140 has to be sufficient for constructing the software component 142.
  • a report layout is a software component 142.
  • a data entry form is a software component 142.
  • a message box is a software component 142.
  • An SQL query is a software component 142.
  • a lookup table is a software component 142.
  • a spreadsheet is a software component 142.
  • a video game is a software component 142.
  • a WHERE clause for an SQL query is a software component 142.
  • a software module which implements a business processing rule is a software
  • sub-operation 110b illustrates that the set of predetermined rules 140 is specified in terms of a source component 144.
  • the set of predetermined rules 140 can be specified in terms of a plurality of source components 144 n .
  • Paper size is a source component 144 of a report layout, which is a software
  • Background color is a source component 144 of a data entry form, which is a
  • a command is a source component 144 of an SQL query, which is software
  • a whitespace is a source component 144 of a source code block, which is a software component 142 of a computer programming language.
  • a width of a textbox is a source component 144 of a textbox object, which is a
  • a tax rate is a source component 144 of a tax calculation business rule, which is a software component 142.
  • a mnemonic is a source component 144 of a source code block, which is a software component 142, of an assembly language.
  • sub-operation 110c illustrates that the source component 144 is represented by a "component value 146" in the software component 142.
  • the source component 144 can be represented by a plurality of component values 146 n .
  • A4, A3, Letter, and 8.5" x 11 " are component values 146i -4 which may be utilized to represent a paper size, which is a source component 144, of a report layout, which is a software component 142.
  • a long integer value is a component value 146 which is utilized to represent a
  • background color which is a source component 144, of a data entry form, which is a software component 142.
  • DATABASE are component values 146 1-6 which may be utilized to represent a command, which is a source component 144, of an SQL query, which is software component 142.
  • a space character and a tab character are component values 146i. 2 which may be utilized to represent a whitespace, which is a source component 144, of a source code block, which is a software component 142, of a computer programming language.
  • a positive integer value is a component value 146 which is utilized to represent the width of a textbox, which is a source component 144, of a textbox object, which is a software component 142.
  • a numeric value is a component value 146 which is utilized to represent a tax rate, which is a source component 144, of a tax calculation business rule, which is a software component 142.
  • MOV, XOR, and CMP are component values 146i- 3 which may be utilized to
  • mnemonic which is a source component 144, of a source code block, which is a software component 142, of an assembly language.
  • the source component 144 is categorized into:
  • the indeterminable source component 148 is represented by a component value 146 which either:
  • a source component 144 may be categorized into an indeterminable source component 148 or a determinable source component 150 on the basis of the desire of a user.
  • categorization of a source component 144 may also be done on the basis of the desire of a user.
  • paper size which is a source component 144
  • a report which is a software component 142
  • paper size may be categorized as an indeterminable source component 148 or as a determinable source component 150, 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 component 150, otherwise paper size will be categorized as an indeterminable source component 148.
  • a component value 146 representing an indeterminable source component 148, is determined by one or more of the following:
  • a column name is an indeterminable source component 148 in an SQL query, which is a software component 142.
  • a date is an indeterminable source component 148 in a WHERE clause, which is a software component 142, of an SQL query, which is also a software component 142.
  • a report title is an indeterminable source component 148 in a report layout, which is a software component 142.
  • a whitespace may be categorized as a indeterminable source component 148 in a block of source code, which is a software component 142, of JAVA programming language, because the whitespace, which is categorized as a indeterminable source component 148, can be represented by either a tab character or a space character, which are component values 146 respectively, and it is desired that the whitespace should not be determined by utilizing a computer implementable logic.
  • a command may be categorized as a indeterminable source component 148 in an
  • SQL query which is a software component 142
  • the command which is categorized as a indeterminable source component 148
  • the command can be represented by SELECT, UPDATE, DELETE, INSERT INTO, CREATE DATABASE, and ALTER DATABASE, which are component values 146 respectively. Therefore, it is not possible to determine a component value 146 for the command, which is categorized as an indeterminable source component 148, by utilizing a computer implementable logic without some kind of implicit and/or explicit information about the SQL query, which is a software component 142.
  • a source component 144 that is not an indeterminable source component 148 can be a determinable source component 150.
  • a command may be categorized as a determinable source component 150 in a
  • SELECT query which is a software component 142
  • the command which is categorized as a determinable source component 150
  • SELECT which is a component value 146.
  • a whitespace may be categorized as a determinable source component 150 in a block of source code, which is a software component 142, of JAVA programming language, because the whitespace, which is categorized as a determinable source component 150, may be represented by a tab character, which is a component value 146.
  • a page number may be categorized as a determinable source component 150 in a report layout which is a software component 142, because the page number, which is categorized as a determinable source component 150, can be represented by a value, which is a component value 146, which can be determined by utilizing a computer implementable logic.
  • a "data token 152" is defined, wherein the data token 152 is desired to be utilized for constructing a software component 142.
  • a data token 152 is to be defined for a source component 144 whose component value is to be determined at runtime for constructing a software component 170 and such value cannot be determined by utilizing a computer implementable logic and/or a parameter 160.
  • a data token 152 is utilized by a software component constructor 170 for determining:
  • a data token 152 is to be defined for:
  • a data token 152 has to be defined for determining, at runtime, a component value 146 and/or a manner in which a software component 142 is to be constructed, wherein it is desired to determine, at runtime, a component value 146 and/or a manner in which a software component 142 is to be constructed, and wherein such determination cannot be made by utilizing a computer implementable logic and/or a parameter 160 for constructing software component 142.
  • a data token 152 is defined to automate construction of a software component at runtime by utilizing a computer implementable logic.
  • association of a token value 154 with a component value 146 enables a software component constructor 170 to determine a place where a specific type of computer implemented logic needs to be applied.
  • association of a token value 154 with a component value 146 enables a software component constructor 170 to act like a human software developer.
  • a data token 152 is defined to enable a machine (computer) to a perform task, during construction of a software component 142 at runtime, which normally requires a 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 token 152 represented by a token value 154, enables a machine to determine what, when, and where a task has to be performed.
  • a data token 152 is created along with a set of data token rules 156 that specifies a manner in which a token value 154 can be created, a manner in which a token value 154 can be associated to a component value 146, and a manner in which a token value 154 can be processed, wherein processing of a token value 154 produces a token result 156, wherein a token result 156 is utilizable for constructing a software component 142.
  • a token value 154 is retrieved by utilizing a parameter value 162.
  • a token value 154 is utilized without being processed.
  • a token value 154 is processed by utilizing a parameter value 162.
  • a token value 154 is utilized without processing for constructing a software component 142.
  • processing of a token value 154 comprises executing a set of instructions which are executable by a processor.
  • a token value 154 is embedded in a component value 146.
  • a token value 154 is implicitly (virtually) associated with a component value 146.
  • a component value 146 is retrieved by utilizing a token value 156.
  • a component value 146 is retrieved by utilizing a parameter value 162.
  • sub-operation 114a illustrates that a data token 152 is represented by a token value 154.
  • sub-operation 114b illustrates that a "token result 156" may be obtained by processing a token value 154, wherein the token value 154 is processed by utilizing a "parameter" 160.
  • sub-operation 114c illustrates that the data token 152 comprises a "set of data token rules 158", wherein the set of data token rules 158 is defined along with the data token 152.
  • the set of data token rules 158 comprises one or more rules which specify one or more manners in which the data token 152 is desired to be utilized for constructing the software component 142.
  • the set of data token rules 158 specifies one or more manners in which the data token 152 is:
  • a token value 154 may be associated with a component value 146 implicitly, wherein implicit association is implemented in a software component constructor 170.
  • a software component constructor 170 may assume that a token value 154 is associated with each component value 146 of a source component 144.
  • a software component constructor 170 may assume that a token value 154 is associated with a specific type of component values 146 n of a source component.
  • a token value 154 may be associated with a component value 146 explicitly, wherein a token value 154 is explicitly associated with a component value 146 of a source component 144. Explicit association can be done in a source object 166 and/or in a software component constructor 170.
  • the data token 152 is utilized to automate tasks, in constructing the software component 142, which are normally performed by a human being.
  • the data token 152 can be utilized to automate all tasks which are required for constructing the software component 142, and which can be performed on the basis of an algorithm and/or a computer implementable logic.
  • a token value 154 of a data token 152 may be determined by utilizing a parameter value 162 of a parameter 160.
  • a data token 152 can also be utilized in numerous other ways to automate any part of constructing a software component 142 which can be automated on the basis of an algorithm and/or a computer implementable logic.
  • a data token 152 can also be utilized for invoking any desired process and/or a task.
  • a network connection may be established, a new program may be started, an existing program may be terminated, a component value 146 may be resolved from a database table, a user input may be acquired, an interaction with an user may be invoked, one or more software components 142 shadow may be constructed, a machine may be started, a machine may be stopped, and the like.
  • a data token 152 can 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.
  • 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.
  • one or more parameters 160 are defined.
  • a parameter 160 is defined for enabling a user to define a component value 146 and/or a token value 154 at runtime.
  • a parameter 160 enables a user to control the construction of a software component 142 at runtime.
  • a parameter 160 represented by a parameter value 162 is utilized to enable a user to interact with and/or direct/control the process of constructing a software component 142, according to the desire and/or requirement of the user, via input of component values 146 n and/or token values 154 n in the form parameter of values 162 label.
  • a component value 146, and/or a token value 154 may be determined at runtime by a parameter value 162, wherein a parameter value is an input by a user, at runtime.
  • a parameter 160 may be utilized by a software component constructor 170 for constructing a software component 142, wherein the software component constructor 170 determines a manner in which a software component 142 is constructed on the basis of a parameter 160.
  • a parameter 160 is defined for determining a source object 166 which is to be utilized for constructing a software component 142.
  • sub-operation 116a illustrates that a parameter 160 is represented by a "parameter value 162" which is specified and/or input by a user, wherein a parameter value 162 is a data value.
  • the parameter 160 may also be defined with a default parameter value 162.
  • the parameter value 162 can be specified and/or input by a user either each time the parameter 160 is utilized or only at a time when the user wants to change the parameter value 162 which the user has already specified; in the latter case, the parameter value 162 may.
  • a parameter 160 may also be defined for determining a component value 146 of an indeterminable source component 148.
  • a parameter 160 may also be defined for determining a component value 146 of an indeterminable source component 148.
  • a parameter 160 may be utilized to enable a user to specify desired report columns along with their order.
  • a parameter 160 may 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.
  • the 160 is defined for determining a value for a paper size, wherein the paper size is an indeterminable source component 148.
  • a user can specify the parameter value 162 by 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.
  • a data model 164 is created, wherein the data model 164 is suitable and is sufficient for creating a "source object repository 168", wherein the source object repository 168 is suitable and sufficient for:
  • source object 166 Storing a "source object 166", wherein the source object 166 is sufficient for comprising one or more component values 146 n representing one or more indeterminable source components 148 n .
  • the source object repository 168 should also provide a mechanism which enables an identification of a source object 166 out of the plurality of source objects 166 n .
  • a token value 154 may be associated by one or more of the following:
  • the data model 164 comprises one or more attributes (which may also be called fields or columns) for storing component values 146 radical for all indeterminable source components 148 radical ⁇ for which neither a data token 152 is defined, nor a parameter 160 is defined.
  • Sub-operation 118a specifies that the data model 164, created at operation 118, is sufficient for storing a source object 166.
  • the source object repository 168 is created, at operation 120, in a desired manner and on the basis of the data model 164. According to an aspect of an embodiment of the invention, the source object repository 168 is created by utilizing one or more of the following:
  • a source object repository 168 may be created by utilizing any suitable data structure which may include, but is not limited to, a data base table, a comma separated text file, a spreadsheet, a matrix, an object, an array, a set of variables, and a linked list.
  • a source object repository 168 is sufficient for storing a source object 166, wherein a source object 166 comprises an indeterminable source component 148 represented by a component value 146, wherein the indeterminable source component 148 is to be utilized for constructing a software component 142.
  • a source object repository 168 is enables identification of a component value 146 in the source component repository 168 wifh reference to the source object 166 and an indeterminable source component 148 which is represented by the component value 146.
  • a source object repository 168 comprises a token value 154 which can:
  • a source object repository [0152] According to-an aspect of an embodiment of the invention, a source object repository
  • a source object repository 168 comprises a plurality of component values 146 n in a desired order.
  • a source object 166 stored in a source object repository 168 is uniquely identifiable.
  • a "software component constructor 170" is created, wherein the software component constructor 170 is a computer program which is sufficient for constructing a software component 142 on the basis of a set of predetermined rules 140 and by utilizing one or more of the following:
  • a software component constructor 170 utilizes a data model 164 of a source object 166 by way of a source object repository 168 for retrieving the source object 166.
  • the software component constructor 170 comprises and implements the set of predetermined rules 140 of a software component 142.
  • a set of predetermined rules 140 may also be adapted in a desired manner for creating a software component constructor 170 to the extent that a software component 142 can be constructed by utilizing the adapted set of predetermined rules 140.
  • a set of predetermined rules 140 can be adapted, as may be desired and/or required, for constructing a software component constructor 170, wherein the adaptation is done in a manner that no rule of the set of predetermined rules 140 is violated to the extent that a software component 142 cannot be constructed on the basis of the adapted set of predetermined rules.
  • a set of predetermined rules 140 has to be sufficient for enabling a software component constructor 170 to construct a software component 142 on the basis of set of predetermined rules 140 and by utilizing one or more of the following:
  • a software component constructor 170 utilizes a data token 152 during construction of a software component 142, wherein a software component constructor 170 utilizes, at runtime, a data token 152 for determining: 1. a component value 146,
  • a software component constructor 170 utilizes a data token 152 to work like a human developer for constructing a software component 142.
  • a software component constructor 170 utilizes.
  • a software component constructor 170 can 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 constructor 170 can also be integrated with a computer program for constructing, at runtime, as many software components as may be desired.
  • the integration of software component constructor 170 can be done by either utilizing an API (Application Programming Interface) or directly incorporating software component constructor 170 in a computer program with which the integration of software component constructor 170 is desired.
  • a software component constructor 170 constructs a software component 142 at runtime according to the desire, specified by way of a parameter 160, of a user.
  • a layer of a computer program which receives one or more parameter 160 n from a user, may be integrated with a software component constructor 170, wherein the software component constructor 170 constructs one or more software components in response to the input parameters 160 flick.
  • a software component constructor 170 may construct a plurality of software components 142 n by utilizing a source object 166, a data token 152, and a parameter 160.
  • a parameter 160 and a data token 152 enable a software component constructor to construct more than one software components 142 n from a source object 166.
  • three sub-operations 122a, 122b and 122c are connected to the operation 122.
  • Each of the sub-operations 122a, 122b and 122c illustrates creation of a module, which is a computer program, wherein the module may be required for constructing a software component 142.
  • Each of the modules created in sub-operations 122a, 122b and 122c can be either: 1. an independent computer program which is linked and/or integrated with the software component constructor 170, or
  • a computer program which is linked with the software component constructor 170 via 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, or
  • 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, or
  • a "parameter resolution module 170a" is created at sub-operation 122a.
  • the parameter resolution module 170a is utilized for resolving a parameter value 162.
  • a parameter value 162 may be resolved by utilizing many different methods, which may include, but are not limited to:
  • a user input via one or more of several ways which may include, but are not limited to:
  • the parameter resolution module 170a may also resolve the parameter value 162 from a computer readable recording medium and/or by utilizing an algorithm and/or a computer executable logic.
  • a "data token processing module 170b" is created.
  • the data token processing module 170b is utilized for processing a token value 154.
  • a "source object resolution module 170c" is created.
  • the source object resolution module 170c is utilized for identifying a source object 166 and then resolving a component value 146 from the source object 166.
  • the source object resolution module 170c can be identified in many ways, which may include, but are not limited to, a utilization of a parameter value 162, a utilization of an algorithm and/or a computer implementable logic, a utilization of a token value 154, and/or any combinations thereof.
  • the source object resolution module 170c may also utilize a parameter value 162 which is resolved by a parameter resolution module 170a, and/or may utilize a token value 154 which is processed by a data token processing module 170b.
  • a source object resolution module 170c may also resolve another component value 146 2 from another source object 166 2 , wherein the source object 166 2 is referenced in the source object 166-
  • the source object resolution module 170c may also resolve a plurality of component values 146 words from a plurality of source objects 166 n , wherein the plurality of source objects 166 n are referenced in the source object 166.
  • the source object resolution module 170c may also change, drop, and/or add a component value 146 on the basis of utilizing a token value 154.
  • a source object 166 is created, wherein the source object 166 is sufficient for constructing a software component 142, and wherein the source object 166 is to be utilized for constructing the software component 142.
  • the creation of the source object 166 may also include creation and association of a token value 154, to a component value 146 and/or another token value 154, of a data token 152 on the basis of a set of data token rules 158.
  • the source object 166 is stored in a source object repository 168.
  • a token value 154 representing a data token 152
  • a component value 146 representing a source component 144 comprised by a source object 166.
  • a source object 166 is created, wherein a source object 166 comprises a component value 146 which represents an indeterminable source component 148, and wherein the component value 146 is utilized for constructing a software component 142.
  • a source object 166 is created in a manner that a token value 154 can be associated with a component value 146 in a manner that the token value 154 can be utilized and or processed.
  • utilization of a token value 154 determines a manner in which a component value 146 is utilized for constructing a software component 142.
  • utilization of a token value 154 determines that a component value 146 is not to be utilized for constructing a software component 142.
  • utilization of a token value 154 determines that a component value 146 is to be processed, and then the processed component value is to be utilized for constructing a software component 142.
  • utilization of a token value 154 determines that a component value 146 is to be modified, and then the modified component value 146 is to be utilized for constructing a software component 142.
  • utilization of a token value 154 determines that a component value 146 is to be changed, and then the changed component value 146 is to be utilized for constructing a software component 142.
  • utilization of a token value 154 determines that a component value 146 is to be utilized for creating another component value 146, and then another created component value 146 is to be utilized for constructing a software component 142.
  • a token value 154 is embedded in a component value 146.
  • a token value 154 is embedded in a source object 166.
  • a source object 166 comprises a component value 146 which is not comprised in a software component 142.
  • a source object 166 comprises a component value 146, which is not comprised in a software component 142, is determined by utilizing:
  • utilization of a token result 156 determines a manner in which a component value 146 is utilized for constructing a software component 142.
  • utilization of a token result 156 determines that a component value 146 is not to be utilized for constructing a software component 142.
  • utilization of a token result 156 determines that a component value 146 is to be processed, and then the processed component value is to be utilized for constructing a software component 142.
  • utilization of a token result 156 determines that a component value 146 is to be modified, and then the modified component value 146 is to be utilized for constructing a software component 142.
  • utilization of a token result 156 determines that a component value 146 is to be changed, and then the changed component value 146 is to be utilized for constructing a software component 142.
  • utilization of a token result 156 determines that a component value 146 is to be utilized for creating another component value 146, and then another created component value 146 is to be utilized for constructing a software component 142.
  • a software component 142 is constructed by utilizing a software component constructor 170.
  • An exemplary construction of the software component 142 is explained in greater detail in Fig. 2.
  • a software component constructor 170 for constructing a software component 142 following steps are performed by a software component constructor 170 for constructing a software component 142:
  • the component value 146 of the indeterminable source component 148 the component value 146 of the indeterminable source component 148, a component value 146 of a determinable source component 150, and a token result 156.
  • a token value 154 is not processed for constructing a software component 142.
  • a token value 154 may be utilized without being processed for constructing a software component 142.
  • a parameter value 162 is not utilized for constructing a software component 142.
  • a parameter value 162 is utilized for processing a token value 154.
  • a component value 146 of a determinable source component 150 is not utilized for constructing a software component 142.
  • a component value 146 of an indeterminable source component 148 is not utilized for constructing a software component 142.
  • a terminal 134 is utilized as another starting point to illustrate that the source object 166, the software component constructor 170, and the source object repository 168 may be utilized as many times as desired.
  • Fig. 2 illustrates an exemplary flowchart of an exemplary working of software component constructor 170 created at operation 122 in Fig. 1 B. This flowchart illustrates only one mode of implementation of software component constructor 170 in accordance with an aspect of an embodiment of the invention. Any person who is skilled in the art can construct software component constructor 170 in many different manners. In other words, Fig. 2 explains operation 126 in greater detail.
  • the parameter resolution module 170a resolves one or more parameter values 162 n wherein the parameter values 162 tunnel are required for constructing one or more desired software components 142 n .
  • source objects 166 are identified by the source object resolution module 170c, wherein the source objects 66 n are required to be utilized for constructing the desired software components 142 n .
  • component values 146 intercept are resolved by the source object resolution module 170c from the source objects 166 context.
  • the source object resolution module 170c may also utilize, for resolving the component values 146 n , one or more of the following:
  • the software component constructor 170 constructs the desired software components 142 on the basis of sets of predetermined rules 140 radiation, and by utilizing one or more of the following:
  • the token values 154-, wherein the token values 154 n may be processed by the data token processing module 170b.
  • FIG. 3 illustrates an exemplary block diagram of an exemplary computing system environment 300 which is suitable for an implementation of an aspect of an embodiment of the invention.
  • Computing system environment 300 includes an exemplary computer 302, an exemplary display unit 330, an exemplary printer 332, an exemplary speaker 334, an exemplary keyboard 336, an exemplary pointing device 338, an exemplary microphone 340, an exemplary digitizer 342, and an exemplary expansion card 344.
  • Computer 302 is connected to an exemplary remote computer(s) 354 so as to work in a networked environment, wherein remote computer(s) 354 is connected to computer 302 via an exemplary communication link 350.
  • an exemplary network auxiliary storage 352 is connected to computer 302 via communication link 350
  • an exemplary remote auxiliary storage 356 is connected to computer 302 via remote computer(s) 354.
  • Communication link 350 is connected to computer 302 via an exemplary communication interface 326.
  • Computing system environment 300 in Fig. 3 illustrates 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 environment 300 inclusive of all the exemplary components incorporated therein. Additionally, computing system environment 300 should not be interpreted as having any dependency on any one and/or any combinations of the components illustrated in computing system environment 300. Furthermore, computing system environment 300 is not limited to the illustrated components; the number of components may be more or less in other configurations and/or environments.
  • the embodiments of the invention can be implemented under any other general and/or special purpose computing system environment and/or configuration.
  • 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 computer 302 include an exemplary processor 304, an exemplary bus 306, an exemplary computer memory 308, an exemplary ROM 310 (Read Only Memory), an exemplary BIOS 312 (Basic Input Output System), an exemplary RAM 314 (Random Access Memory), an exemplary auxiliary storage interface 316, an exemplary auxiliary storage 318, an exemplary video controller 320, an exemplary input/output interface unit(s) 322, an exemplary expansion interface 324, and communication interface 326.
  • exemplary processor 304 an exemplary bus 306, an exemplary computer memory 308, an exemplary ROM 310 (Read Only Memory), an exemplary BIOS 312 (Basic Input Output System), an exemplary RAM 314 (Random Access Memory), an exemplary auxiliary storage interface 316, an exemplary auxiliary storage 318, an exemplary video controller 320, an exemplary input/output interface unit(s) 322, an exemplary expansion interface 324, and communication interface 326.
  • Processor 304 which may be utilized in a plurality, is connected to bus 306.
  • Processor 304 may include, but is not limited to, a microprocessor, a RISC (Reduced Instruction Set Computer) processor, and a CISC (Complex Instruction Set Computer) processor.
  • RISC Reduced Instruction Set Computer
  • CISC Complex Instruction Set Computer
  • Bus 306 which connects one or more components to processor 304 for facilitating data exchange between processor 304 and the connected one or more components, may comprise one or more of the following:
  • 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.
  • Bus 306 may 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
  • Bus 306 may also provide for adding one or more input/output components to expansion interface 324 by utilizing expansion card 344.
  • Expansion interface 324 and expansion card 344 may support one or more bus types that are supported by bus 306.
  • Expansion interface 324 may 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.
  • ISA Industry Standard Architecture
  • PCI Peripheral Component Interconnect
  • FireWire e.g., a SCSI (Small Computer System Interface) interface
  • SCSI Serial Computer System Interface
  • RS-232 interface RS-232 interface
  • ATA Advanced Technology Attachment
  • SATA Serial Advanced Technology Attachment
  • PATA Parallel Advanced Technology Attachment
  • Expansion card 344 may 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.
  • Computer 302 typically requires a memory which is represented in Fig. 3 as computer memory 308.
  • Computer memory 308 comprises ROM 310 and RAM 314.
  • computer memory 308 is not limited to ROM 310 and/or RAM 314, and may include any other type and/or form of memory that may be accessed directly by processor 304.
  • Computer memory 308 is connected to bus 306 for storing information and instructions to be executed by processor 304.
  • contents of computer memory 308 may also include contents that are being currently operated upon by processor 304.
  • bus 306 connects computer memory 308 to processor 304.
  • ROM 310 For a start-up, computer 302 typically 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 ROM 310 in the Fig. 3.
  • ROM 310 may 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
  • BIOS 312 comprises computer start-up routines and other basic routines that facilitate transfer of information between various components of computer 302.
  • ROM 310 may also store an operating system, a device driver, an application program, a data structure, other program modules, a static application data and the like.
  • Computer 302 also typically requires a volatile memory, which is represented by RAM 314 in the Fig. 3.
  • RAM 314 is generally utilized for storing a computer program, and information/instructions to be executed by processor 304.
  • RAM 314 may also be utilized for storing temporary variables or other intermediate data during the execution of the instructions by processor 304.
  • RAM 314 is 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).
  • SRAM StaticRAM
  • DRAM Dynamic RAM
  • SDRAM Synchronous DRAM
  • DDR SDRAM Double Data Rate SDRAM
  • ESDRAM Enhanced SDRAM
  • SLDRAM Synchronous Link DRAM
  • DRDRAM Direct Rambus DRAM
  • processor 304 can access the contents of ROM 310 and RAM 314 directly by utilizing bus 306. Moreover, the contents of ROM 310 and RAM 314 may include contents that are being currently operated upon by processor 304.
  • Auxiliary storage interface 316 facilitates connectivity between auxiliary storage 318 and computer 302 via bus 306.
  • Auxiliary storage 318 may also be connected to computer 302 through communication link 350 as network auxiliary storage 352 and/or through remote computer(s) 354 as remote auxiliary storage 356.
  • Auxiliary storage 3 8 provides 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 data base, and an application data.
  • Auxiliary storage interface 316 may 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 storage 318 may 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 storage 318 may 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
  • Display unit 330 and video controller 320 may 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.
  • CGA Color Graphic Adapter
  • EGA Enhanced Graphics Adapter
  • VGA Video Graphics Array
  • SVGA Super Video Graphics Array
  • an XGA extended Graphics
  • Display unit 330 and video controller 320 may 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.
  • VGA connector standard may include, but is not limited to, VGA connector standard, DVI (Digital Visual Interface) standard, and HDMI (High-Definition Multimedia Interface) standard.
  • DVI Digital Visual Interface
  • HDMI High-Definition Multimedia Interface
  • a touch screen panel (not shown in the Fig. 3) may also be attached to display unit 330, wherein display unit 330 is utilized to display an output, and the touch screen is utilized as an input device.
  • Computing system environment 300 may include other output devices that may be connected to bus 306 through input/output interface unit(s) 322.
  • Input/output interface unit(s) 322 may 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.
  • a PS/2 interface may 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.
  • USB Universal Serial Bus
  • 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.
  • 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
  • the input/output devices may be used in a plurality.
  • Computer 302 may also typically operate in a networked environment wherein computer 302 is connected to other computers, such as remote computer(s) 354, by utilizing communication link 350, wherein communication link 350 is established by utilizing communication interface 326, wherein communication interface 326 is coupled with bus 306.
  • Remote computer(s) 354 may include, but is not limited to, a computer similar to computer 302, 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.
  • a computer similar to computer 302 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.
  • PDA Personal Digital Assistant
  • Computer 302 and remote computer(s) 354 may 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.
  • 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.
  • CORBA Common Object Request Broker Architecture
  • RPC Remote Procedure Call
  • CBSE Component Based Software Engineering
  • REST REpresentational State Transfer
  • Communication interface 326 which is coupled to bus 306, provides a two-way data communication coupling via communication link 350, wherein communication link 350 is utilized for connecting computer 302 with other components such as network auxiliary storage 352, remote computer(s) 354, and remote auxiliary storage 356.
  • Communication interface 326 may 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 link 350 facilitates 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).
  • networks 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 link 350 may 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.
  • WAP Wireless Application Protocol
  • GPRS General Packet Radio Service
  • GSM Global System for Mobile Communication
  • CDMA Code Division Multiple Access
  • TDMA Time Division Multiple Access
  • Communication link 350 may 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.
  • various very highspeed 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 link 350 may 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.
  • topologies 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 link 350 may 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).
  • IP Internet Protocol
  • IPv4 IPv6
  • ICMP Internet Control Message Protocol
  • IGMP Internet Group Management Protocol
  • IPsec Internet Protocol Security
  • TCP Transmission Control Protocol
  • UDP User Datagram Protocol
  • HTTP Hypertext Transfer Protocol
  • FTP File Transfer Protocol
  • Telnet Telnet
  • IRC Internet Relay Chat
  • DSL Digital Subscriber Line
  • ISDN Integrated Service Digital Network
  • Remote computer(s) 354 and communication link 350 may 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.
  • a computer-readable media e.g., a non-transitory or persistent computer- readable medium.
  • Figs. 4A to 10Z illustrate detailed steps which are required, according to an aspect of an embodiment of the invention, for constructing desired exemplary SQL queries, which are software components 142 n , for MICROSOFT ACCESS and/or ORACLE databases. These steps include:
  • FIGs. 4A to 1 OZ illustrate 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.
  • queryBuilder wherever used in the description of Figs. 4A to 10Z, is intended to refer to an example of the software component constructor 170.
  • queryBuilder is an exemplary embodiment developed in accordance with certain principles of the invention and is illustrated in Figs. 8A to 8P. However, the invention is not, in any way, dependent on or restricted by queryBuilder.
  • FIG. 4A to 90 The embodiments illustrated in Figs. 4A to 90 are 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:
  • Fig. 4A illustrates two exemplary sets of predetermined rules 400, selected according to an aspect of an embodiment of the invention, wherein the two exemplary sets of predetermined rules 400 include a set of predetermined rules for ACCESS SELECT query 401 , which is an example of the set of predetermined rules 140, and a set of predetermined rules for ORACLE SELECT query 402, which is also an example of the set of predetermined rules 140.
  • the two exemplary sets of predetermined rules 400 include a set of predetermined rules for ACCESS SELECT query 401 , which is an example of the set of predetermined rules 140, and a set of predetermined rules for ORACLE SELECT query 402, which is also an example of the set of predetermined rules 140.
  • the set of predetermined rules for ACCESS SELECT query 401 comprises 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 query 402 comprises 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 4K illustrate the set of predetermined rules for ACCESS SELECT query 401 in 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
  • the decision boxes are represented by diamond shaped boxes.
  • a circle such as 410a, 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 include 470a, 470b, 470c, 471a, 471b, 472a, 472b, and the like.
  • Each terminal is an example of the source component 144.
  • Non-terminals include 401 , 402, 410, 411 , 412, and the like.
  • FIG. 4B illustrates a starting point of ACCESS SELECT query 401
  • end-point 401 b illustrates an ending point of ACCESS SELECT query 401
  • Fig. 4B also illustrates two non-terminal boxes 410 and 411 , which are illustrated in greater detail in Fig. 4C and Fig. 4D respectively.
  • Fig. 4C illustrates non-terminal box 410 in greater detail. Entry-point 410a and end-point 410b of non-terminal box 410 are also illustrated in Fig. 4C. Three non-terminal boxes 412, 413 and 414 are also illustrated in Fig. 4C. The three non-terminal boxes 412, 413 and 414 are illustrated in greater detail in Figs. 4E, 4F, and 4G respectively.
  • Fig. 4D illustrates non-terminal box 411 in greater detail. Entry-point 411a and end- point 411 of non-terminal box 411 are also illustrated in Fig. 4D.
  • Fig. 4E illustrates non-terminal box 412 in greater detail. Entry-point 412a and end- point 412b of non-terminal box 412 are also illustrated in Fig. 4E. A non-terminal box 415 is also illustrated in Fig. 4E. Non-terminal box 415 is illustrated in greater detail in Fig. 4H.
  • Fig. 4F illustrates non-terminal box 413 in greater detail. Entry-point 413a and end- point 413b of non-terminal box 413 are also illustrated in Fig. 4F. Three non-terminal boxes 416, 417 and 418 are also illustrated in Fig. 4F. The three non-terminal boxes 416, 417 and 418 are illustrated in greater detail in Figs. 41, 4J, and 4K respectively.
  • Fig. 4G illustrates non-terminal box 414 in greater detail. Entry-point 414a and end- point 414b of non-terminal box 414 are also illustrated in Fig. 4G.
  • Fig. 4H illustrates non-terminal box 415 in greater detail. Entry-point 415a and end- point 415b of non-terminal box 415 are also illustrated in Fig. 4H.
  • Fig. 4I illustrates non-terminal box 416 in greater detail. Entry-point 416a and end- point 416b of non-terminal box 416 are also illustrated in Fig. 4I. Non-terminal box 410 is also illustrated in Fig. 4I. Non-terminal box 410 is illustrated in greater detail in Fig. 4C.
  • Fig. 4J illustrates non-terminal box 417 in greater detail. Entry-point 417a and end- point 417b of non-terminal box 417 are also illustrated in Fig. 4J.
  • Fig. 4K illustrates non-terminal box 418 in greater detail. Entry-point 418a and end- point 418b of non-terminal box 418 are also illustrated in Fig. 4K.
  • Figs. 4L to 4R illustrate the set of predetermined rules for ORACLE SELECT query 402 in 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
  • the decision boxes are represented by diamond shaped boxes.
  • entry-point 402a illustrates starting point of the set of predetermined rules for ORACLE SELECT query 402 and end-point 402b illustrates ending point of the set of predetermined rules for ORACLE SELECT query 402.
  • Fig. 4L also illustrates two non-terminal boxes 430 and 411 which are illustrated in greater detail in Fig. 4M and Fig. 4D respectively.
  • Fig. 4M illustrates non-terminal box 430 in greater detail. Entry-point 430a and end- point 430b of non-terminal box 430 are also illustrated in Fig. 4M.
  • Four non-terminal boxes 431 , 432, 433 and 414 are also illustrated in Fig. 4M.
  • the four non-terminal boxes 431 , 432, 433 and 414 are illustrated in greater detail in Figs. 4N, 40, 4P, and 4G respectively.
  • Fig. 4N illustrates non-terminal box 431 in greater detail. Entry-point 431a and end- point 431 b of non-terminal box 431 are also illustrated in Fig. 4N. Non-terminal box 434 is also illustrated in Fig. 4N. Non-terminal box 434 is illustrated in greater detail in Fig. 4Q.
  • Fig. 40 illustrates non-terminal box 432 in greater detail. Entry-point 432a and end- point 432b of non-terminal box 432 are also illustrated in Fig. 40. Non-terminal box 435 is also illustrated in Fig. 40. Non-terminal box 435 is illustrated in greater detail in Fig. 4R.
  • Fig. 4P illustrates non-terminal box 433 in greater detail. Entry-point 433a and end- point 433b of non-terminal box 433 are also illustrated in Fig. 4P.
  • Fig. 4Q illustrates non-terminal box 434 in greater detail. Entry-point 434a and end- point 434b of non-terminal box 434 are also illustrated in Fig. 4Q.
  • Fig. 4R illustrates non-terminal box 435 in greater detail. Entry-point 435a and end- point 435b of non-terminal box 435 are also illustrated in Fig. 4R. A non-terminal box 430 is also illustrated in Fig. 4R. Non-terminal box 430 is illustrated in greater detail in Fig. 4M.
  • Fig. 4S illustrates all those source components that are categorized as
  • each of the indeterminable source components 148i-24 is desired to be represented by at least one component value 146, in a desired query, which: 1. either cannot be generated by utilizing an algorithm and/or a computer
  • Fig. 4T illustrates all source components that are categorized as determinable source components 150i-i5- Each of the determinable source components 150i-is is represented by a component value 146 which can be generated by utilizing an algorithm and/or computer implementable logic. Following are the exemplary determinable source components:
  • Fig. 5A illustrates exemplary data tokens, wherein each of the data tokens is defined for utilization in conjunction with a component value 146, representing one or more of the indeterminable source components illustrated in Fig. 4S and/or determinable source components illustrated in Fig. 4T.
  • Data token qryGrp 512 which is an example of a data token 152, is represented by a token value 154 of a Boolean type, and can be represented by one of three possible token values: True, False and NULL
  • a set of data token rules 158 for qryGrp 512 is specified as follows:
  • qryGrp 512 is represented by True, which is an example of a token value 154, then the desired query will be constructed as an aggregate query.
  • qryGrp 512 can be associated with a component value 146 in a manner that queryBuilder can construct a desired query, either an aggregate query or a non-aggregate query, on the basis of a token value 154, which represents qryGrp 512.
  • qryGrp 512 enables determination of a component value 146 for "GROUP 471 b", which is an indeterminable source component 148.
  • Data token qryUni 514 which is an example of a data token 152, is represented by a token value 154 of a Boolean type, and can be represented by one of three possible token values: True, False and NULL.
  • a set of data token rules 158 for qryUni 514 is specified as follows:
  • qryUni 514 comprises True, which is an example of a token value 154, then the desired query will be constructed as a UNION query by utilizing UNION ALL operator.
  • qryUni 514 can be associated with a component value 146 in 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 value 154, which represents qryUni 514.
  • qryUni 514 enables determination of a component value 146 for "UNION ALL 471c" which is an indeterminable source component 148.
  • Token value 154 of qryUni 514 could 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, qryUni 514 is utilized for catering only to the UNION ALL operator.
  • Data token srcUseCnd 516 which is an example of a data token 152, is represented by a token value 154 of a string type, which is either:
  • a token value 154 representing srcUseCnd 516, can be associated with a component value 146, which represents "table-name 472k", which is an example of indeterminable source component 148, and be processed in conjunction with a parameter value 162 of a parameter prmUseCnd 622, which is an example of a parameter 160.
  • the result of the processed token value 154 which is an example of a token result 156,
  • the token value 154 representing srcUseCnd 516, can be processed at the time of:
  • srcUseCnd 516 is processed on the basis of the following set of data token rules 158:
  • a component value 146 representing table-name 472k, is utilized if either:
  • a token value 154 which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, is either an empty string or a NULL value, or
  • a token value 154 which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, comprises at least one string value which is also comprised by the parameter value 162 of prmUseCnd 622.
  • a token value 154 which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k
  • the parameter value 162 of prmUseCnd 622 is "nop.xyz”
  • the component value 146, representing table-name 472k will be utilized for constructing the desired query.
  • the parameter value 162 of prmUseCnd 622 is an empty string or a NULL value, but the token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, comprises at least one string value, or
  • the token value 154 which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, comprises no string value that is comprised by the parameter value 162 of prmUseCnd 622.
  • the token value 154 which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, must also be associated to all component values that are either utilized with the component value 146, representing table-name 472k, or are directly dependent on the component value 146, representing table-name 472k, or
  • the component values, which are either utilized with the component value 146, representing table-name 472k, or are directly dependent on the component value 146, representing table-name 472k should be structured in a manner that, if the component value 146, representing table-name 472k, is not utilized for constructing a desired query, then the component values, which are either utilized with the component value 146, representing table-name 472k, or are directly dependent on the component value 146, representing table-name 472k, should also not be utilized for constructing a desired query.
  • Data token colUseCnd 518 which is an example of a data token 152, is represented by a token value 154 of a string type, which is either:
  • a token value 154 representing colUseCnd 518, can be associated with a desired component value 1 6, which represents fldAla 472c, which is an example of an
  • indeterminable source component 148 is processed in conjunction with the parameter value 162 of a parameter prmUseCnd 622, which is an example of parameter 160.
  • the token value 154, representing colUseCnd 518 can be processed at the time of:
  • colUseCnd 518 is processed on the basis of the following set of data token rules 158:
  • a component value 146 representing fldAla 472c, is utilized if either:
  • a token value 154 which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, is either an empty string or a NULL value, or
  • a token value 154 which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, comprises at least one string value that is also comprised by the parameter value 162 of prmUseCnd 622.
  • a parameter value 162 of prmUseCnd 622 is an empty string or a NULL value, but the token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, comprises at least one string value, or
  • the token value 154 which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, comprises no string value that is comprised by the parameter value 162 of prmUseCnd 622.
  • the token value 154 which represents colUseCnd 518, and which is also associated to the component value 146, representing the fldAla 472c
  • the parameter value 162 of prmUseCnd 622 is "nop.rst”
  • the component value 146, representing fldAla 472c 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.
  • the token value 154 which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, must also be associated to all component values that are either utilized with the component value 146, representing fldAla 472c, or are directly dependent on the component value 146, representing fldAla 472c, or
  • the component values, which are either utilized with the component value 146, representing fldAla 472c or are directly dependent on the component value 146, representing fldAla 472c be structured in a manner that, if the component value 146, representing fldAla 472c, is not utilized for constructing the desired query, then the component values, which are either utilized with the component value 146, representing fldAla 472c, or are directly dependent on the component value 146, representing fldAla 472c, should also not be utilized for constructing the desired query.
  • Data token colReuse 520 which is an example of a data token 152, is represented by a token value 154 of a Boolean type and can comprise one of three possible token values: True, False and NULL.
  • colReuse 520 is utilized in conjunction with a token value 154, which represents another data token tknMonth 524.
  • colReuse 520 is to be associated with a component value 146 that represents fldAla 472c.
  • colReuse 520 enables queryBuilder to identify a component value 146 that represents fldAla 472c, and it is desired to generate component values 146 radical on the basis of token result 156 of tknMonth 524 and which is also associated with the component value which represents fldAla 472c, wherein the token result 156 of tknMonth 524 is obtained by processing the token value 154, which represents tknMonth 524.
  • the component values, which are utilized with a component value 146, which represents fldAla 472c, or which are directly dependent on the a component value 146 which represents fldAla 472c are to be structured in a manner that all component values, which are either utilized with the component value 146, which represents fldAla 472c, or which are directly dependent on component value 146, which represents fldAla 472c, can be generated together with the component value 146, which represents fldAla 472c.
  • Data token tknAlias 522 which is an example of a data token 152, is represented by a token value "!, an exclamation sign without quotes, as specified by a set of data token rules 158 for tknAlias 522.
  • the set of data token rules 158 for tknAlias 522 also specifies that tknAlias 522 is implicitly associated with the source component table-name 472k in such a manner that for each such new component value 146, which represents table-name 472k, tknAlias 522 is utilized for generating a new and a unique table/view alias comprising one or more alphabets. Since the association of tknAlias 522 is implicit, "I" (exclamation sign without quotes) is never utilized with any component value 146 that represents table-name 472k.
  • tknAlias 522 enables determination of a component value 46 for srcAla 472e, which is an indeterminable source component 148.
  • tknAlias 522 can also be associated with a component value 146 that represents fldNamCol 472b and/or fldXpr 472d, wherein the association with the component value 146 which represents fldNamCol 472b and/or fldXpr 472d is achieved by embedding "I"
  • a component value 146 representing table-name 472k which is a table/view alias, and which is generated as a result of processing a token value 154, which represents tknAlias . 522, is "b" (lowercase b without quotes)
  • a token value 154 which represents tknAlias . 522
  • the following are a few examples which illustrate component values which are related to the component value tbIA and represent fIdNamCol 472b and/or fldXpr 472d, and which are also associated with "! (exclamation sign without quotes):
  • Data token tknMonth 524 which is an example of a data token 152, is utilized for creating one or more component values that represent fIdNamCol 472b, fldAla 472c, and/or fldXpr 472d.
  • tknMonth 524 is processed on the basis of a token value 154, which represents col Reuse 520, and a parameter value 162 of a parameter prmMthCnt 614, which is an example of a parameter 160.
  • tknMonth 524 can be utilized in one of the following two formats:
  • tknMonth 524 is utilized with three arguments: argComp, argTrue and argFalse.
  • This format of tknMonth 524 can only be embedded in component values that represent fIdNamCol 472b and/or fldXpr 472d. In this format, all three arguments, argComp, argTrue, and argFalse, 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.
  • tknMonth 524 is utilized for determining the component values of the following indeterminable source components:
  • tknMonth 524 is done on the basis of a token value 154, which represents colReuse 520, and the parameter value 162 of prmMthCnt 614, which is an example of a parameter 160.
  • An exemplary set of data token rules 158 for colReuse 520 specifies that if a token value which represents colReuse 520 is a NULL value or False, or the parameter value 162 of prmMthCnt 614 is either zero or not defined, then tknMonth 524 is processed on the basis of the following part of the set of data token rules 158 for tknMonth 524:
  • tknMonth 524 is embedded as %TknMth%, which is an example of a token value
  • tknMonth 524 is embedded as %TknMth,colCmpare,colTrue,colFalse%, which is an example of a token value 154, then %TknMth,colCmpare,colTrue,colFalse% will be replaced with colTrue wherever tknMonth 524 is embedded.
  • the set of data token rules 158 for colReuse 520 also specifies that if the token value 154, which represents colReuse 520, is True, and the parameter value 162 of prmMthCnt 614 is a positive integer, then the token value 154, which represents tknMonth 524, is processed in a manner that the component value 146 representing fldAla 472c along with all component values, which are either related to the component value 146 representing fldAla 472c or which are dependent on the component value 146 representing fldAla 472c, are utilized for constructing a desired query as many number of times as specified by the parameter value 162 of prmMthCnt 614.
  • the parameter value 162 of prmBegMth 616 which is an example of a parameter 160, is also utilized.
  • the component value 146 which represents fldAla 472c along with all component values 146 n which are either related to the component value 146 representing fldAla 472c, or which are dependent on the component value 146 representing fldAla 472c, 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 value 162 of prmMthCnt 614.
  • tknMonth 524 is processed on the basis of the following parts of the set of data token rules 158 for tknMonth 524:
  • %TknMth% which is an example of a token value 154
  • %TknMth% which results from the processing of the component value representing fldAla 472c, along with all component values that are either related to the component value representing fldAla 472c or are dependent on the component value representing fldAla 472c, is replaced by the first three letters of the name of the next month, starting from the month represented by the parameter value 162 of prmBegMth 616, and always continuing from Jan (for January) after Dec (for December) is reached.
  • %TknMth% which is an example of a token value 154
  • %TknMth,argComp,argTrue,argFalse% which results from the processing of the component value representing fldAla 472c, along with all component values, which are either related to the component value representing fldAla 472c, or which are dependent on the component value representing fldAla 472c, is replaced by either an IIF 471f function or a DECODE 471 n function depending on the database for which the desired query is being constructed.
  • argComp is compared with a value that is equal to the parameter value 162 of prmBegMth 616 at the first iteration, and the value will be increased by 1 for every next iteration, of the component values representing fldAla 472c, along with all component values, which are either related to the component value representing fldAla 472c or are dependent on the component value representing fldAla 472c.
  • the value will start at 1 whenever the value goes beyond 12.
  • Data token tknCurlyBrackets 526 which is an example of a data token 152, can be embedded in the component value 146 of the indeterminable source component whrXpr 472a.
  • Data token tknCurlyBrackets 526 is represented by curly brackets, which are always utilized in a pair; an opening curly bracket, which is an example of a token value 154 of tknCurlyBrackets 526, " ⁇ " (without quotes) and a closing curly bracket, which is an example of a token value 154 of tknCurlyBrackets 526, " ⁇ " (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 5C illustrate an exemplary flowchart which explains an exemplary set of data token rules 158, specifying an exemplary processing logic, for tknCurlyBrackets 526.
  • the exemplary flowchart does not provide any means for error checking and/or incorrect utilization of tknCurlyBrackets 526; throughout this exemplary flowchart, it is assumed that tknCurlyBrackets 526 is utilized appropriately.
  • whrXpr 472a represented as "a target string” in the flowchart, is assigned to a variable EmbStr.
  • tknCurlyBrackets 526 can only be utilized in a component value representing whrXpr 472a.
  • tknCurlyBrackets 526 can be utilized in any other component value of a string type, if required and/or desired.
  • a token value 154 representing tknCurlyBrackets 526 is not utilized in whrXpr 472a.
  • DtaTkn which carries a token value representing a data token
  • DtaTkn is processed in a desired manner, and the result of the processed token value carried by DtaTkn is assigned to a variable TknResult.
  • 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.
  • a variable Pos3 is assigned a value of (Pos2 + 1 ).
  • a variable Pos4 is assigned the position of the last occurrence of " ⁇ " (without quotes) just before Pos1 from the left side in EmbStr.
  • TknResult carries a NULL value or not. If TknResult carries a NULL value, then the flow continues to operation 550m. Otherwise, the flow continues to 550n.
  • TknResult carries a NULL value or not. If TknResult carries a NULL value, then the flow continues to operation 550 p. Otherwise, the flow continues to 550q.
  • the character at Pos4 is replaced with a space character.
  • the string starting from Pos1 and ending at Pos2 (both Pos1 and Pos2 included) in EmbStr is replaced with the value carried by TknResult.
  • Data token tknltemCodeBegin 528 is processed in conjunction with the parameter value 162 of a parameter prmltmBeg 624.
  • An exemplary set of data token rules for tknltemCodeBegin 528 specifies that tknltemCodeBegin 528 is represented by "itmBeg" (without quotes) and can only be embedded in a component value representing whrXpr 472a. When processed, "itmBeg" (without quotes) is replaced by the parameter value 162 of prmltmBeg 624.
  • a data token tknItemCodeEnd 530 is processed in conjunction with the parameter value 162 of a parameter prmltmEnd 626.
  • An exemplary set of data token rules for tknItemCodeEnd 530 specifies that tknItemCodeEnd 530 is represented by "itmEnd” (without quotes) and can only be embedded in a component value representing whrXpr 472a. When processed, "itmEnd" (without quotes) is replaced by the parameter value 162 of prmltmEnd 626.
  • Fig. 6 illustrates 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
  • Fig. 6 illustrates the following exemplary parameters:
  • Parameter prmQryld 612 which is an example of a parameter 160, is of a string type.
  • the parameter value 162 of prmQryld 612 is utilized to identify a source object, which is desired to be utilized for constructing a desired query.
  • Parameter prmMthCnt 614 which is an example of a parameter 160, is of a number type.
  • the parameter value 162 of prmMthCnt 614 specifies the number of months which is utilized for processing a token value which represents tknMonth 524.
  • the parameter value 162 of prmMthCnt 614 can be an integer ranging from 0 and 12, both inclusive.
  • Parameter prmBegMth 616 which is an example of a parameter 160, is of a number type.
  • the parameter value 162 of prmBegMth 616 is utilized for specifying the starting month which is utilized for processing a token value which represents tknMonth 524.
  • the parameters of prmBegMth 616 can be an integer ranging from 1 and 12, both inclusive.
  • Parameter prmOraQry 618 which is an example of a parameter 160, is of a Boolean type.
  • the parameter value 162 of prmOraQry 618 is utilized for determining the database for which a desired query is to be constructed. If the parameter value 162 of prmOraQry 618 is True, then the desired query is constructed for ORACLE. Otherwise, the desired query is constructed for MICROSOFT ACCESS.
  • Parameter prmLftJoi 620 which is an example of a parameter 160, is of a Boolean type.
  • the parameter value 162 of prmLftJoi 620 is utilized for determining the type of a JOIN which is to be used in a desired query. If the parameter value 162 of prmLftJoi 620 is 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 value 162 of the prmLftJoi 620 is utilized for determining a component value 146 of the following indeterminable source components:
  • Parameter prmUseCnd 622 which is an example of a parameter 160, is of a string type.
  • the parameter value 162 of prmUseCnd 622 is utilized for processing a token value, which represents srcUseCnd 516 and/or colUseCnd 518.
  • Parameter prmltmBeg 624 which is an example of a parameter 160, is of a string type.
  • the parameter value 162 of prmltmBeg 624 is utilized for processing "itmBeg" (without quotes), which is the token value which represents
  • Parameter prmltmEnd 626 which is an example of a parameter 160, is of a string type.
  • the parameter value 162 of prmltmEnd 626 is utilized for processing "itmEnd" (without quotes), which is the token value which represents
  • Fig. 7A illustrates a few exemplary attributes (which may also be called columns or fields), for an exemplary data model 164 illustrated in Fig. 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 the FIG. 4S, whose component values are not determinable either by utilizing a parameter 160, and/or by utilizing a data token 152, according to an aspect of an embodiment of the invention.
  • Attributes illustrated in Fig. 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 in Fig. 7A: 1.
  • Attribute qryWhr 752 is utilized for storing and determining a component value 146 of the following indeterminable source components:
  • Attribute srcld 754 is utilized for storing and determining a component value 146 of the following indeterminable source components:
  • Attribute srcJoinFId 756 is utilized for storing and determining a component value 146 of fldAlal 472m, which is an example of an indeterminable source component 148.
  • Attribute srcJoinToFId 758 is utilized for storing and determining a component value
  • Attribute srcJoinToSrc 760 is utilized for storing and determining a component value
  • Attribute colAla 762 is utilized for storing and determining a component value 146 of fldAla 472c, which is an example of an indeterminable source component 148.
  • Attribute colXpr 764 is utilized for storing and determining a component value 146 of the following indeterminable source components:
  • Attribute colGrpFun 766 is utilized for storing and determining a component value
  • Fig. 7B illustrates a data model, which is an example of a data model 164, which is utilized for creating an exemplary source object repository 168, wherein the exemplary source object repository 168 is 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 repository 168 which is created on the basis of the exemplary data model 164, 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 model 164 is created in a manner that it is sufficient for creating an exemplary source object repository 168 which is sufficient for:
  • the exemplary data model 164 comprises the following three entities:
  • Query 702 is 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.
  • Query 702 comprises the following attributes:
  • qryld 732 is an exemplary attribute which is utilized in query 702 for the identification of a specific source object, qryld 732 acts as a primary key, and is utilized for uniquely identifying each source object.
  • qryld 732 is implemented as a string, and may comprise any valid component value of a string type. Since qryld 732 is utilized only for identifying and referencing a source object, there are no specific rules for a component which may be stored in qryld 732.
  • qryld 732 the component value stored in qryld 732 must be unique for each source object, and may comprise only printable characters, qryld 732 is 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.
  • qryWhr 752 is utilized for storing a WHERE clause expression in this exemplary data model.
  • qryWhr 752 is 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 tknCurly Brackets 526, tknltemCodeBegin 528, and/or tknltemCodeEnd 530.
  • a component stored in qryWhr 752 is a string, which:
  • qryGrp 512 is embedded in query 702, so as to enable queryBuilder to determine whether a desired query is an aggregate query or not.
  • qryUni 514 is embedded in query 702, so as to enable queryBuilder to determine whether a desired query is a UNION ALL query or not.
  • Query source 704 is a child entity of query 702, wherein query 702 has a one-to- many relationship 712 with query source 704. Query 702 also has another one-to-many relationship 714 with query source 704. The one-to-many relationship 714 is optional. Query 702 comprises following attributes:
  • srcQryld 734 is an exemplary attribute which is utilized in query source 704 for enabling a one-to-many relationship 712.
  • srcQryld 734 is a foreign key which is related to qryld 732 of query 702.
  • query source 704 srcQryld 734 is implemented as a string data type, and is of the same size as of qryld 732.
  • srcQryld 734 and srcld 754 serve as a composite primary key in query source 704.
  • srcOrd 736 is an exemplary attribute which is utilized in query source 704 for maintaining a desired order among a plurality of component values that are stored in srcld 754.
  • srcOrd 736 is implemented as a long integer data type; however, srcOrd 736 can be implemented as any other data type which is sufficient for maintaining an order among a plurality of component values that are stored in srcld 754.
  • data types may include, but are not limited to, a short integer, a string, and a floating point.
  • srcld 754 is 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 srcld 754 must be unique within one source object because srcld 754 is a part of the composite primary key of query source 704.
  • src!d 754 may be represented by either: . a component value which represents a table/view name which exists in a database which is intended to execute a desired query, or
  • srcReuseld 738 is an exemplary attribute which is utilized in query source 704 to enable a utilization of another source object in query source 704.
  • srcReuseld 738 is a foreign key and may optionally comprise a value from qryld 732.
  • srcReuseld 738 cannot comprise a data value which represents its parent qryld 732, because such a data value will cause an infinite recursive loop in this exemplary data model.
  • the one-to-many relationship 714 is implemented by utilizing qryld 732 and srcReuseld 738.
  • srcUseCnd 516 is embedded in query source 704. If the processing of the token value comprised by srcUseCnd 516 determines that srcld 754 cannot be utilized for constructing a desired query, then the complete record, comprising the token value of srcUseCnd 516 and the data value of srcld 754, including all child records, will not be utilized for constructing a desired query. [0353] srcJoinFId 756, srcJoinToFId 758, and srcJoinToSrc 760 are utilized to specify information which is required to join two tables, two views or one table and one view.
  • srcJoinFId 756 is utilized to specify a field alias which belongs to a table/view specified by srcld 754 of the current record.
  • srcJoinToFId 758 is utilized to specify a field alias which belongs to the other table/view which is to be joined with table/view specified by srcld 754 of the current record, and is specified by the component value representing srcJoinToSrc 760.
  • self joins are not implemented.
  • Query field 706 is a child entity of query source 704, wherein query source 704 has a one-to-many relationship 716 with query field 706.
  • Query field 706 comprises the following attributes:
  • colQryld 740 and colSrcId 742 are two exemplary attributes which are utilized in query field 706 for enabling the one-to-many relationship 716.
  • colQryld 740 and colSrcId 742 are foreign keys which are related to srcQryld 734 and srcld 754 respectively.
  • colQryld 740 and colSrcId 742 are implemented by utilizing a string data type and are of the same size as srcQryld 734 and srcld 754 respectively.
  • colQryld 740, colSrcId 742, and colAla 762 serve as a composite primary key in query field 706.
  • colOrd 744 is an exemplary attribute which is utilized in query field 706 for maintaining a desired order among a plurality of those component values that are stored in colAla 762.
  • query field 706 colOrd 744 is implemented as a long integer data type;
  • colOrd 744 could 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 colAla 762.
  • data types may include, but are not limited to, a short integer, a string, and a floating point.
  • colAla 762 is utilized to specify a valid column/field alias for a desired query.
  • colAla 762 is implemented as a string data type in this exemplary data model.
  • a component value, which is stored in colAla 762, may also be embedded with %TknMth% which is a token value representing tknMonth 524.
  • the component values stored in colAla 762 must be unique within one source object with reference to their parent component value, which is stored in srcld 754, because colAla 762 is a part of the composite primary key of query source 704.
  • colXpr 764 is utilized to specify a valid expression for a desired query.
  • colXpr 764 is implemented as a string data type in this exemplary data model.
  • a component value, which Is stored in colAla 762, may also be embedded with:
  • colUseCnd 518 is embedded in query field 706. If the processing of the token value comprised by colUseCnd 518 determines that colAla 762 cannot be utilized for constructing the desired query, the entire record, comprising the token value of colUseCnd 518 and component values of colAla 762, will not be utilized for constructing a desired query.
  • colGrpFun 766 is 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.
  • SUM SUM
  • Group SUM
  • colAla 762 is utilized in a GROUP BY clause, otherwise the component value stored in colXpr 764 is treated as an expression and is not included in the GROUP BY clause.
  • the utilization of only the SUM function is illustrated; however, colGrpFun 766 can be utilized for implementing any other function, such as, AVG, MAX, MIN, and the like.
  • colReuse 520 is embedded in query field 706, and is utilized to specify those records of query field 706 which are desired to be replicated.
  • Fig. 7C illustrates an exemplary implementation of the exemplary data model 164, illustrated in Fig. 7B, as an exemplary source object repository 168.
  • Query 702 is implemented as a tbIQry 782, which is a MICROSOFT ACCESS database table.
  • Query source 704 is implemented as a tbIQrySrc 784, which is a MICROSOFT ACCESS database table.
  • Query field 706 is implemented as a tbIQryFId 786, which is a MICROSOFT ACCESS database table.
  • Figs. 8A to 8P illustrate an exemplary flowchart of an exemplary software component constructor 170 which is implemented as a function and is called queryBuilder.
  • queryBuilder is utilized for constructing a desired query by utilizing a source object 166, which is stored in tbIQry 782, tbIQrySrc 784, and tbIQryFId 786, which are the data tokens illustrated in Fig. 5A, and the parameters illustrated in Fig. 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.
  • this exemplary flowchart may require a programming language specific interpretation of one or more operations, illustrated in the exemplary flowchart.
  • 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.
  • 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.
  • 3. comprises an empty value according to its data type, for example, an empty string, a zero, and a False.
  • 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.
  • queryBuilder receives a parameter for prmQryld 612, which is utilized to identify a desired source object from tbIQry 782.
  • decision box 810b 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 operation 810c and operation 81 Od respectively. If this is the first call to queryBuilder, then the flow continues to operation 810c. Otherwise, the flow continues to operation 810e.
  • 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.
  • 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.
  • 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.
  • an array variable varTblAry is initialized. varTblAry is a two dimensional array that is utilized for storing component values in srcld 754 along with a table/view alias, which is generated, as a result of processing tknAlias 522, for srcld 754.
  • varAlaCnt is initialized to zero. varAlaCnt is utilized for calculating an alias for tknAlias 522.
  • the object varQryRcd is opened, wherein the object varQryRcd comprises all fields of tbIQry 782, wherein the data value of qryld 732 is equal to the parameter value 162 of prmQryld 612. Since qryld 732 is the primary key, the object varQryRcd will comprise maximum one record.
  • the object varSrcRcd is opened, wherein the object varSrcRcd comprises all fields of tbIQrySrc 784, wherein the data value of srcQryld 734 is equal to the data value of qryld 732, and the order of the Recordset comprised by the object varSrcRcd is on the data values of srcOrd 736.
  • the varSrcAvl is assigned a result of the processed token value of srcUseCnd 516.
  • the processing of the token value of srcUseCnd 516 is done in an exemplary function called CheckAvailability, which is illustrated in detail in Fig. 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.
  • tknAlias 522 is processed.
  • tknAlias 522 is processed by an exemplary function NewAlias(), which is illustrated in detail in Fig. 8R.
  • the alias generated by a function NewAlias() is then stored in a variable varCurAla.
  • queryBuilder is called recursively for constructing a sub-query, wherein the sub-query is identified by a data value of srcReuseld 738.
  • the resultant sub-query is stored in a variable varSubQry.
  • the object varFldRcd is opened, wherein the object varFId Red comprises all fields of tbIQryFId 786, wherein the data value of colQryld 740 is equal to the data value of srcQryld 734, the data value of colSrcId 742 is equal to the data value of srcld 754, and the order of the Recordset represented by the object varFldRcd is on the data values of colOrd 744.
  • varFldAvl is assigned a result, which is an example of token result 156, of the processed token value of coiUseCnd 518.
  • the processing of the token value of coiUseCnd 518 is done in the exemplary function CheckAvailability, which is illustrated in detail in Fig. 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. 8Q illustrates an exemplary flowchart of an exemplary processing of two data tokens, srcUseCnd 516 and coiUseCnd 518, wherein the processing of srcUseCnd 516 and coiUseCnd 518 is implemented by utilizing the exemplary function CheckAvailability. Since the processing logic of both data tokens, srcUseCnd 516 and coiUseCnd 518, is the same, the processing of both data tokens is implemented as one function.
  • the function CheckAvailability starts and receives a parameter prmCndTkn which comprises a parameter which will be either a token value representing srcUseCnd 516, or a token value representing coiUseCnd 518, depending on the location from where the function CheckAvailability is called.
  • the parameter value 162 of prmUseCnd 622 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.
  • varCndPrm the parameter value 162 of prmUseCnd 622
  • prmUseCnd 622 comprises only one string value
  • varCndPrm will comprise one array item.
  • prmUseCnd 622 comprises 10 comma-separated string values
  • varCndPrm will comprise 10 array items, wherein each array item will comprise a string value.
  • Fig. 8R illustrates an exemplary flowchart of an exemplary processing of the function NewAlias(), which is utilized for an exemplary processing of tknAlias 522. Each time the function NewAliasQ is called, it returns a new alias comprising one or more alphabets. [0394] At operation 827a, the function NewAlias() starts.
  • MOD represents modulo operation, which finds the remainder of a division of the value of a variable varWrkCnt by 26.
  • INT represents an integer function, which returns only the integer part of a number without rounding the number.
  • CHR represents a function, which returns an ASCII character which is represented by the number that is passed to CHR as a parameter.
  • Fig. 8S illustrates 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 tknCurlyBrackets 526, tknltemCodeBegin 528, and tknItemCodeEnd 530.
  • prmOrgWhr comprises an already built WHERE clause, which may be an empty string in certain cases
  • prmNewWhr which may be an empty string and which comprises a WHERE clause that is desired to be merged in prmOrgWhr.
  • FIGs. 8T to 8X illustrate an exemplary flowchart of an exemplary implementation of a processing of tknCurlyBrackets 526, tknltemCodeBegin 528, and tknItemCodeEnd 530 on -the-basis of the processing rules.-illustrated in Figs. 5B and 5G, and the processing rules specified for tknltemCodeBegin 528 and tknItemCodeEnd 530.
  • the function WhereToken starts and receives a parameter prmRawWhr comprises a WHERE clause which may contain one or more token values representing tknCurlyBrackets 526, tknltemCodeBegin 528, and/or tknItemCodeEnd 530.
  • variable varTknDta contains neither "itmBeg” (without quotes), which represents tknltemCodeBegin 528, nor "itmEnd” (without quotes), which represents tknltemCodeEnd 530.
  • FIGs. 9A to 90 illustrate exemplary source objects, which are stored in the source object repositories tbIQry 782, tbIQrySrc 784, and tbIQryFId 786, which are to be utilized by queryBuilder for constructing a desired query.
  • Fig. 9A illustrates a specific exemplary segment from tbIQry 782 (represented as 782a because it illustrates a specific exemplary segment of tbIQry 782), which shows an exemplary source object that is identifiable by qryA (a data value representing qryld 732), hereinafter called exemplary source object qryA, and which is represented in a record 901.
  • 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.
  • the desired query constructed by utilizing the exemplary source object qryA will always be the same for a specific database.
  • the parameters of prmOraQry 618 and prmLftJoi 620 can 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 tbIQrySrc 784 (represented as 784a because it illustrates a specific exemplary segment of tbIQrySrc 784) comprises three records which are related to record 901. Each record in 784a illustrates 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. 784a illustrates:
  • a record 901a comprising tblltems.
  • a record 901b comprising tbIBrands, wherein tbIBrands will be JOINED with tblltems in the desired query constructed by utilizing the exemplary source object qryA by utilizing a column brandCode.
  • a record 901c comprising tbIOrigins, wherein tbIOrigins will be JOINED with tblltems in the desired query constructed by utilizing the exemplary source object qryA by utilizing a column originCode.
  • Fig. 9B illustrates exemplary records from tbIQryFId 786 (represented as 786b because it illustrates a specific exemplary segment of tbIQryFId 786) which are related to the record 901a, wherein the record 901a is illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784b because it illustrates a specific exemplary segment of tbIQrySrc 784).
  • the records illustrated in 786b comprise columns of tblltems, which is comprised by record 901a, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object qryA.
  • Fig. 9C illustrates exemplary records from tbIQryFId 786 (represented as 786c because it illustrates a specific exemplary segment of tbIQryFId 786), which are related to record 901 b, wherein record 901b is illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784c because it illustrates a specific exemplary segment of tbIQrySrc 784).
  • the record illustrated in 786c comprises a column of tbIBrands, which is comprised by record 901 b, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object qryA.
  • Fig. 9D illustrates exemplary records from tbIQryFId 786 (represented as 786d because it illustrates a specific exemplary segment of tbIQryFId 786) which are related to record 901c, wherein record 901c is illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784d because it illustrates a specific exemplary segment of tbIQrySrc 784).
  • the record illustrated in 786d comprises a column of tbIOrigins, which is comprised by record 901c, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object qryA.
  • Fig. 9E illustrates an exemplary segment of tbIQry 782 (represented as 782e because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object which is identifiable by qryPur (a data value which represents qryld 732), hereinafter called exemplary source object qryPur, and is represented in record 902.
  • the exemplary source object qryPur is utilized in another source object, which is identifiable by qryUnion (a data value which represents qryld 732), hereinafter called the exemplary source object qryUnion, illustrated in Fig. 9G.
  • queryBuilder can construct a desired query by utilizing only the exemplary source object qryPur.
  • An exemplary segment of tbIQrySrc 784 (represented as 784e because it illustrates a specific exemplary segment of tbIQrySrc 784) comprises one record 902a which is related to record 902.
  • Record 902a illustrates 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.
  • srcUseCnd 516 is represented by an exemplary token value comprising a list of comma separated string comprising two string values: TknPur and TknZon. Utilization of srcUseCnd 516 implies that during the construction of a desired query which utilizes the exemplary source object qryPur, record 902a will be utilized only if the parameter value 162 of prmUseCnd 622 comprises at least one of the string values: TknPur and TknZon.
  • Record 902b will be utilized only if record 902a is utilized.
  • Record 902c will be utilized only if srcUseCnd 516 comprises a string value TknZon.
  • Record 902d will be utilized only if srcUseCnd 516 comprises a string value TknPur.
  • Record 902e will be utilized only if srcUseCnd 516 comprises a string value TknSal.
  • the string value TknSal is not included in record 902a because record 902a and its related records 902b, 902c, 902d, and 902e are not desired to be utilized for constructing a desired query if the parameter value 162 of srcUseCnd 516 comprises string value TknSal, but does not comprise any of the string values: TknPur and TknZon.
  • %TknMth% which is a token value representing tknMonth 524, is embedded in the component value representing colAla 762.
  • colXpr 764 comprises an exemplary token value 154
  • %TknMth,lpurchaseMonth,!Amount,0% which represents tknMonth 524, wherein the token value representing tknMonth 524 also comprises two instances of "! (sign of exclamation without quotes), which is a token value 154 representing tknAlias 522.
  • This exemplary implementation illustrates a nesting of a token value representing tknAlias 522 in another token value representing tknMonth 524.
  • the arguments purchaseMonth and Amount, which are utilized in colXpr 764 of record 902d, are column names of tbIPurchases, and 0 is a constant value.
  • colReuse 520 is represented by an exemplary data value True. This implies that records 902d and 902e will be utilized for constructing a desired query if utilized on the basis of colUseCnd 518, as many times as specified by the parameter value 162 of prmMthCnt 614. In a case where the parameter value 162 of prmMthCnt 614 is zero, records 902d and 902e will be utilized only once.
  • Fig. 9F illustrates an exemplary segment of tbIQry 782 (represented as 782f because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object which is identifiable by qrySal (a data value which represents qryld 732), hereinafter called the exemplary source object qrySal, and represented in record 903.
  • the exemplary source object qrySal is utilized in another source object, identifiable by the exemplary source object qryUnion, which is illustrated in Fig. 9G.
  • queryBuilder can construct a desired query by utilizing only the exemplary source object qrySal.
  • An exemplary segment of tbIQrySrc 784 (represented as 784f because it illustrates a specific exemplary segment of tbIQrySrc 784) comprises one record 903a which is related to record 903.
  • Record 903a illustrates 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.
  • srcUseCnd 516 is represented by an exemplary token value comprising a list of comma separated string comprising two string values; TknSal and TknZon.
  • the utilization of srcUseCnd 516 implies that during the construction of a desired query which utilizes the exemplary source object qrySal, record 903a will be utilized only if the parameter value 162 of prmUseCnd 622 comprises at least one of the string values: TknSal and TknZon.
  • Record 903b will be utilized only if record 903a is utilized.
  • Record 903c will be utilized only if srcUseCnd 516 comprises a string value TknZon.
  • Record 903d will be utilized only if srcUseCnd 516 comprises a string value TknSal.
  • Record 903e will be utilized only if srcUseCnd 516 comprises a string value TknPur.
  • the string value TknPur is not included in record 903a because record 903a, and its related records 903b, 903c, 903d, and 903e, are not desired to be utilized for constructing a desired query if the parameter value 162 of srcUseCnd 516 comprises a string value TknPur, but does not comprise any of the string values: TknSal and TknZon.
  • %TknMth% which is a token value representing tknMonth 524, is embedded in the component value stored in colAla 762.
  • colXpr 764 comprises an exemplary token value
  • implementation illustrates a nesting of a token value representing tknAlias 522 in another token value representing tknMonth 524.
  • the arguments saleMonth and Amount, which are utilized in colXpr 764 of record 903d, are column names of tbISales, and 0 is a constant value.
  • colReuse 520 is represented by an exemplary data value True. This implies that records 903d and 903e will be utilized for constructing a desired query if utilized on the basis of colUseCnd 518, as many times as specified by the parameter value 162 of prmMthCnt 614. In a case where the parameter value 162 of prmMthCnt 614 is zero, records 903d and 903e will be utilized only once.
  • Fig. 9G illustrates an exemplary segment of tbIQry 782 (represented as 782g because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object identifiable by a data value qryUnion, which represents qryld 732, and is stored in record 904.
  • qryUni 514 is 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.
  • Record 904 has two related records illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784g because it illustrates a specific exemplary segment of tbIQrySrc 784). If both the exemplary records of 784g, record 904a and record 904b, 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.
  • srcReuseld 738 is represented by a data value qrySal, which specifies that the exemplary source object qrySal will be utilized, as a view, whenever the record 904a will be utilized for constructing a desired query.
  • a data value, qrySale, which represents srcld 754 of record 904a, is an exemplary arbitrary name given to a desired query, which is constructed by utilizing the exemplary source object qrySal.
  • srcReuseld 738 is represented by a data value qryPur, which specifies that the exemplary source object qryPur will be utilized, as a view, whenever record 904b will be utilized for constructing a desired query.
  • a data value qryPurchase, which represents srcld 754 of record 904b, is an exemplary arbitrary name given to a desired query, which is constructed by utilizing the exemplary source object qryPur.
  • Fig. 9H illustrates an exemplary segment of tbIQry 782 (represented as 782h because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object identifiable by a data value qryGroup, hereinafter called the exemplary source object qryGroup, which represents qryld 732, and is in record 905.
  • qryGrp 512 is 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.
  • Record 905 has one related record illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784h because it illustrates a specific exemplary segment of tbIQrySrc 784), which is represented by record 905a.
  • Record 905a has four related records illustrated in an exemplary segment of tbIQryFId 786 (represented as 786h because it illustrates a specific exemplary segment of tbIQryFId 786).
  • colGrpFun 766 is represented by a component value "Group" (without quotes), which implies that the columns mentioned by records 905b and 905c will be utilized in GROUP BY clause of a desired query, which is constructed by utilizing the exemplary source object qryGroup.
  • colGrpFun 766 comprises an exemplary component value "SUM" (without quotes), which implies that SUM function will be applied on the columns mentioned by records 905d and 905e in a desired query which is constructed by utilizing the exemplary source object qryGroup.
  • Fig. 9I illustrates an exemplary segment of tbIQry 782 (represented as 782i because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object, identifiable by qryFinal (a data value representing qryld 732), hereinafter called the exemplary source object qryFinal, which is represented in record 906.
  • qryFinal a data value representing qryld 732
  • Record 906 has five related exemplary records illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784i because it illustrates a specific exemplary segment of tbIQrySrc 784), which are represented by records 906a, 906b, 906c, 906d, and 906e.
  • the five exemplary records illustrated in 784i represent four tables and one view, which may be utilized in a desired query which is constructed by utilizing the exemplary source object qryFinal.
  • each of records 906a, 906b, 906c, and 906e comprises a definition of one table which may be utilized, on the basis of the token value representing.
  • Record 906d comprises a definition of a view, specified by "qryGroup" (without quotes), which is a data value representing srcReuseld 738, and which may be utilized, on the basis of the token value representing srcUseCnd 516 of its respective record and the parameter value 162 of prmUseCnd 622, in a desired query which is constructed by utilizing the exemplary source object qryFinal.
  • Fig. 9J illustrates records of tbIQryFId 786 (represented as 786j because it illustrates a specific exemplary segment of tbIQryFId 786) which are related to record 906a, which is illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784j because it illustrates a specific exemplary segment of tbIQrySrc 784).
  • the records illustrated in 786j specify columns of tbl Items, which is comprised by record 906a, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
  • Fig. 9K illustrates a record of tbIQryFId 786 (represented as 786k because it illustrates a specific exemplary segment of tbIQryFId 786) which is related to record 906b, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784k because it illustrates a specific exemplary segment of tbIQrySrc 784).
  • the record illustrated in 786k specifies a column of tbIBrands, which is comprised by record 906b, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
  • Fig. 9L illustrates a record of tbIQryFId 786 (represented as 7861 because it illustrates a specific exemplary segment of tbIQryFId 786) which is related to record 906c, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 7841 because it illustrates a specific exemplary segment of tbIQrySrc 784).
  • the record illustrated in 7861 specifies a column of tbIOrigins, which is comprised by record 906c, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
  • Fig. 9M illustrates records of tbIQryFId 786 (represented as 786m because it illustrates a specific exemplary segment of tbIQryFId 786) which are related to record 906d, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784m because it illustrates a specific exemplary segment of tbIQrySrc 784).
  • the records illustrated in 786m specify columns of qryGroupSrc, which is comprised by record 906d, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
  • Fig. 9N illustrates a record of tbIQryFId 786 (represented as 786n because it illustrates a specific exemplary segment of tbIQryFId 786) which is related to record 906e, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784n because it illustrates a specific exemplary segment of tbIQrySrc 784).
  • the record illustrated in 786n specifies a column of tbiZones, which is comprised by record 906e, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
  • Fig. 9N illustrates a record of tbIQryFId 786 (represented as 786n because it illustrates a specific exemplary segment of tbIQryFId 786) which is related to record 906e, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784n because it illustrates
  • tbIQry 782 illustrates an exemplary segment of tbIQry 782 (represented as 782o because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object, identifiable by qryModify (a data value representing qryld 732), hereinafter called the exemplary source object qryModify, which is represented in record 907.
  • qryModify a data value representing qryld 732
  • qryWhr 752 is represented by an exemplary WHERE clause expression, wherein the exemplary WHERE clause expression is embedded with token values representing tknCurlyBrackets 526, tknltemCodeBegin 528, and tknltemCodeEnd 530.
  • Record 907 has one related exemplary record illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784o because it illustrates a specific exemplary segment of tbIQrySrc 784), which is represented by record 907a.
  • Record 907a has ten related records, which are illustrated in an exemplary segment of tbIQryFId 786 (represented as 786o because it illustrates a specific exemplary segment of tbIQryFId 786).
  • colUseCnd 518 is represented by an exemplary token value "Tknltm" (without quotes), which is utilized to enable the utilization of records 907b and 907c for constructing a desired query, which is constructed by utilizing the exemplary source object qryModify optionally on the basis of the parameter value 162 of prmUseCnd 622.
  • Figs. 10A to 10Z illustrate a few exemplary desired queries constructed by queryBuilder, which is illustrated in Figs. 8A to 8P, by utilizing one or more source objects, illustrated in Figs. 9A to 90. It is to be noted that only a few exemplary queries are illustrated in Figs. 10A to 1 OZ. Queries which can be constructed by utilizing different combinations of parameters, which are illustrated in Fig. 6, and source objects, which are illustrated in Figs. 9A to 90, 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. 0A illustrates an exemplary desired query 1012a which is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified in Fig. 10A.
  • Fig. 10B illustrates an exemplary desired query 1012b which is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified in Fig. 10B.
  • Fig. 10C illustrates an exemplary desired query 1012c which is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified in Fig. 10C.
  • Fig. 10D illustrates an exemplary desired query 1012d which is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified in Fig. 10D.
  • Fig. 10E illustrates an exemplary desired query 1012e which is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified in Fig. 10E.
  • Fig. 10F illustrates an exemplary desired query 1012f which is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified in Fig. 10F.
  • Fig. 10G illustrates an exemplary desired query 1012g which is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified in Fig. 10G.
  • Fig. 10H illustrates an exemplary desired query 1012h which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10H.
  • Fig. 101 illustrates an exemplary desired query 1012i which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 101.
  • Fig. 10J illustrates an exemplary desired query 1012j which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10J.
  • Fig. 10K illustrates an exemplary desired query 1012k which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10K.
  • Fig. 10L illustrates an exemplary desired query 10121 which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10L.
  • Fig. 10N illustrates an exemplary desired query 1012m which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10M.
  • Fig. 10P illustrates an exemplary desired query 1012o which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10O.
  • Fig. 10Q illustrates an exemplary desired query 1012q which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10Q.
  • Fig. 10R illustrates an exemplary desired query 1012r which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10R.
  • Fig. 10S illustrates an exemplary desired query 1012s which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10S.
  • Fig. 10T illustrates an exemplary desired query 1012t which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10T.
  • Fig. 10U illustrates an exemplary desired query 1012u which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10U.
  • Fig. 10V illustrates an exemplary desired query 1012v which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10V.
  • Fig. 10X illustrates an exemplary desired query 1012w which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10W.
  • Fig. 10Z illustrates an exemplary desired query 1012y which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10Y. 2.
  • 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 environment 300 of Fig. 3.
  • a computing hardware computing apparatus
  • 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 environment 300 of Fig. 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.
  • 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.
  • 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 innovative source object repository of the invention can make software
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • CRM Customer Relationship Management
  • ERP Enterprise Resource Planning
  • GIS Global Information System

Abstract

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.

Description

A Method and an Apparatus for Developing Software
CROSS-REFERENCE TO RELATED APPLICATION
[0001] This application is related to and claims the benefit of priority to U.S. Serial Number 13/242,558, Attorney Docket No. 2112.1002, entitled A METHOD AND AN APPARATUS FOR DEVELOPING SOFTWARE, by Ahmad Raza, filed September 23, 2011 in the U.S. Patent and Trademark Office, the contents of which are incorporated herein by reference.
BACKGROUND
1. Field
[0002] This invention relates to the field of software development.
2. Description of the Related Art
[0003] 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.
[0004] 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.
[0005] 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.
[0006] 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.
[0007] 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.
[0008] 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.
[0009] 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.
[0010] 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
[0011] 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.
[0012] 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).
[0013] 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.
[0014] 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.
[0015] 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.
[0016] 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.
[0017] 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. [0018] Many more advantages will be readily apparent to one who is skilled in the art. BRIEF DESCRIPTION OF THE DRAWINGS
[0019] The concepts, principles, methods, specifications, embodiments and salient features of the invention are illustrated by way of examples, and not by way of any limitation, in the below listed figures along with their drawings and detailed descriptions, wherein like reference numerals refer to similar elements.
[0020] Fig. 1 A illustrates a flowchart representing an aspect of an embodiment of the invention.
[0021] Fig. 1 B illustrates a flowchart representing an aspect of an embodiment of the invention in more detail.
[0022] Fig. 2 illustrates a flowchart representing an exemplary construction of an exemplary software component, according to an aspect of an embodiment of the invention.
[0023] Fig. 3 is an exemplary illustration of a schematic diagram of a computing system environment inclusive of an exemplary computer and other exemplary components which are suitable for implementing an aspect of an embodiment of the invention.
[0024] Fig. 4A illustrates two exemplary sets of predetermined rules which are selected according to an aspect of an embodiment of the invention.
[0025] Figs. 4B to 4K illustrate an exemplary syntax diagram of a set of predetermined rules for ACCESS SELECT QUERY, selected according to an aspect of an embodiment of the invention.
[0026] Figs. 4L to 4R illustrate an exemplary syntax diagram of a set of predetermined rules for ORACLE SELECT QUERY, selected according to an aspect of an embodiment of the invention.
[0027] Fig. 4S illustrates an exemplary block diagram which shows a few source components, illustrated in Figs. 4B to 4R, which are categorized as indeterminable source components according to an aspect of an embodiment of the invention.
[0028] Fig. 4T illustrates an exemplary block diagram which shows a few source components, illustrated in Figs. 4B to 4R, which are categorized as determinable source components according to an aspect of an embodiment of the invention. [0029] Fig. 5A illustrates an exemplary block diagram which shows a few exemplary data tokens which are defined according to an aspect of an embodiment of the invention.
[0030] Figs. 5B and 5C illustrate an exemplary flowchart which shows an exemplary set of data token rules of an exemplary specific data token, according to an aspect of an embodiment of the invention.
[0031] Fig. 6 illustrates an exemplary block diagram which shows exemplary parameters which are defined according to an aspect of an embodiment of the invention.
[0032] Fig. 7A illustrates an exemplary block diagram which shows a few exemplary attributes (may be called columns or fields as well), for a data model, which are to be included in source object repository to hold component values for desired indeterminable source components out of all indeterminable source components illustrated in the FIG. 4S, according to an aspect of an embodiment of the invention.
[0033] Fig. 7B illustrates an exemplary data model which is sufficient for creating a source object repository, according to an aspect of an embodiment of the invention.
[0034] Fig. 7C illustrates an exemplary source object repository which is created on the basis the exemplary data model, illustrated in Fig. 7B, according to an aspect of an embodiment of the invention.
[0035] Figs. 8A to 8P illustrate an exemplary flowchart of an exemplary software component constructor, called queryBuilder in this document, according to an aspect of an embodiment of the invention.
[0036] Fig. 8Q illustrates an exemplary flowchart of an exemplary processing of an exemplary specific data token, according to an aspect of an embodiment of the invention.
[0037] Fig. 8R illustrates an exemplary flowchart of an exemplary processing of another exemplary specific data token, according to an aspect of an embodiment of the invention.
[0038] Fig. 8S illustrates an exemplary flowchart of an exemplary function which is utilized by queryBuilder.
[0039] Figs. 8T to 8X illustrate an exemplary flowchart of the exemplary data token whose processing logic is illustrated in Figs. 5B and 5C, according to an aspect of an embodiment of the invention. [0040] Figs. 9A to 90 illustrate a few exemplary source objects which are stored in the exemplary source object repository illustrated in Fig. 7C, according to an aspect of an embodiment of the invention.
[0041] Figs. 10A to 10Z illustrate a few exemplary queries which are constructed by queryBuilder by utilizing the few exemplary source objects illustrated in Figs. 9A to 90, according to an aspect of an embodiment of the invention.
DETAILED DESCRIPTION/EMBODIMENTS
1. Definitions
[0042] 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.
[0043] 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.
[0044] A "software component" 142 refers 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," wherein 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 component 142 may 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.
[0045] Examples of a software component 142 comprising another software 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.
[0046] A "source component" 144 is represented by at least one data value, hereinafter called component value 146, in a software component 142. In other words, a source component 144 is just like a property of a software object, whereas a component value 142 is just like the value of the property of the software object. Examples of a source component 144 may 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" x 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.
[0047] A "set of predetermined rules" 140 comprises 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 rules 140 may include, but are not limited to:
1. A set of predetermined rules for creating an SQL query, which is a software
component, according 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.
[0048] 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. [0049] A "data token" 152 comprises a set of data token rules 158 and is represented by a data value, hereinafter called token value 154, 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 result 156, 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.
[0050] Following are a few examples of a data token 152:
1. tknCompare is a data token 152 which is represented by a token value Comp(A,B).
When Comp(A,B) is processed according to its set of data token rules, 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 are 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, and
c. 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 constructor 170 to generate an appropriate report on the basis of the values of "A" and "B".
2. tknRetrieve is a data token 152 which is represented by a token values tknDept(). A set of data token rules for processing tknRetrieve specifies that the token value tknDept() is processed in such a manner that it returns all department codes from a database table called tbl Department, 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 constructor 170 to create an appropriate query, at runtime, on the basis of departments returned as a token result 156 when tknDept(), token value 154 of tknRetrieve, is processed.
JoinType is a data token 152 which is utilized for constructing a SELECT query, which is a software component. According to a set of data token rules of 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), and
d. 3 - Right Join (a query will be constructed with RIGHT JOIN because the first character of the token value is 3).
A token value 154 of tknJoinType may be retrieved by utilizing a parameter value 162 obtained from a user at runtime and an SQL query may be constructed by a software component constructor 170 accordingly. source object" 166 comprises: omponent value 146,
ken value 154,
ata value, which specifies:
a. an identity of a source object 166,
b. a meta data describing a source object 166,
c. a relation, order, and/or hierarchy among a component value 146 and a token value 154,
d. a relation, order, and/or hierarchy among a plurality of component values 146n,
e. a relation, order, and/or hierarchy among a plurality of token values 154n, f. reference to a component value 146,
g. reference to a token value 154,
h. reference to another source object 166, or
i. any combinations thereof, or
4. any combinations thereof.
[0052] A "software component constructor" 170 is a computer program which is sufficient for constructing a software component 142, or a part thereof, on the basis of a set of predetermined rules 140 and by utilizing a source object 166, a component value 146, a token value 154, a token result 156, or any combinations thereof, wherein a source object 166, a component value 146, and/or a token value 154 may be determined by utilizing a parameter value 162. 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.
[0053] A "source object repository" 168 comprises one or more data structures and is utilized for storing a source object 166 in 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, and
b. 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, and
e. any combinations thereof.
[0054] 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.
[0055] 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.
[0056] 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.
[0057] The terms "including/include/includes", and/or "have/having/has", as used herein, are defined as "comprising/comprises" (i.e., open language).
[0058] 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.
[0059] Utilization of a parameter, as used herein, is defined as utilization of a parameter value of the parameter.
[0060] The headings in this detailed description have been inserted for ease of readability and have no interpretative role.
2. The challenges in software development: [0061] 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, and
3. 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.
[0062] 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.
[0063] 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
[0064] 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?
[0065] 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
[0066] 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 [0067] 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
[0068] 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..
[0069]
7. An embodiment according to an aspect of the invention (Fig. 1 A)
[0070] Fig. 1 A is an exemplary flowchart that illustrates as aspect of an embodiment of the invention.
[0071] According to an aspect of an embodiment of the invention, at operation 20, a source object repository 168 is created. A source code repository 168 is utilized to store one or more source objects 166„ comprising one or more token values 154n and/or one or more component values 146„ which represent one or more indeterminable source components 148n. A source object repository 168 is based on a data model 164 which 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.
[0072] According to an aspect of an embodiment of the invention, a source object repository 168 is created on the basis of a data model 164.
[0073] According to an aspect of an embodiment of the invention, a data model 164 is created on the basis of a set of predetermined rules 140 of a software component 142 (a software source code) and by utilizing one or more indeterminable source components 148„. [0074] According to an aspect of an embodiment of the invention, following steps are taken for creating a data model 164:
1. A set of predetermined rules 140 is selected, wherein the selected set of
predetermined rules 140 is defined terms of one or more source components 144n.
2. Each of the one or more source components 144n is categorized into one of the following categories:
a. an indeterminable source component 148, or
b. a determinable source component 150.
3. One or more data tokens 152n along with their respective sets of data token rules
158„ are defined.
4. A data model 164 is created on the basis of the selected set of predetermined rules
140 and by utilizing:
a. one or more indeterminable source components 148„.
b. one or more data tokens 152n, or
c. any combinations thereof.
[0075] According to an aspect of an embodiment of the invention, a data model 164 enables reusability of a source object 166, a data token value 154, and/or a component value 146.
[0076] According to an aspect of an embodiment of the invention, source components 144n of a software component (software source code) 142 are categorized in indeterminable source components 148„. and determinable source components 150„, wherein
categorization is done on the basis of:
1. rules, based upon which a software component is written/developed,
2. desire of a user, or
3. any combinations thereof.
[0077] By way of an example, and not a limitation, the staring command, which is a source component 144, of an SQL query is determinable source component 150 if 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 staring command, which is a source component 144, of the SQL query is an indeterminable source component 148, 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 component 150 because 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 component 148 because of the rules for writing queries for updating, inserting, viewing, and/or removing records from a database.
[0078] According to an aspect of an embodiment of the invention, at operation 30, a software component constructor (source code generator) 170, which is a computer program, is created.
[0079] According to an aspect of an embodiment of the invention, a software component constructor 170 is utilized for constructing (generating) one or more software components 144n. By way of an example, and not a limitation, a software component constructor 170 may be utilized for generating (constructing) an invoice entry form, which is a software component 142, at runtime according to a user's requirements which are specified by utilizing one or more parameters 160„.
[0080] According to an aspect of an embodiment of the invention, a software component constructor 170 retrieves one or more source objects 166n from one or more source object repositories 168„ for constructing one or more software components 142n.
[0081] According to an aspect of an embodiment of the invention, a software component constructor 170 accepts one or more parameter values 162n from a user at runtime for constructing one or more software components 142„.
[0082] According to an aspect of an embodiment of the invention, a software component constructor 170 accepts a parameter value 162 at a user interface level of a computer program.
[0083] According to an aspect of an embodiment of the invention, a software component constructor 170 is utilized for constructing one or more software components 142„ at runtime.
[0084] According to an aspect of an embodiment of the invention, at operation 40, a software component 142 is constructed by a software component constructor 170 which utilizes a source object 166 which is created, before constructing the software component 142, and stored in a source object repository 168.
[0085] According to an aspect of an embodiment of the invention, a source object 166 can be utilized, with a parameter 160, for constructing a plurality of software components 142„. 8. An embodiment according to an aspect of the invention (Fig. 1 B)
[0086] Fig. 1 B is an exemplary flowchart that illustrates operations 20, 30, and 40 of Fig. 1A in greater detail, according to an aspect of an embodiment of the invention.
[0087] At terminal 108, the exemplary flowchart starts.
[0088] According to an aspect of an embodiment of the invention, at operation 110, a "set of predetermined rules 140" is selected, wherein the set of predetermined rules 140 is sufficient for constructing a "software component 142", wherein the software component 142 is a software component that is desired to be constructed. According to an aspect of an embodiment of the invention, the set of predetermined rules 140 may be adapted as may be desired as long as a predetermined rule in the set of predetermined rules 140 is not violated to an extent where the software component 142 cannot 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 rules 140n (where n >= 1 ) can be selected. According to an aspect of an embodiment of the invention, a plurality of software
components 142„ can be constructed on the basis of the set of predetermined rules 140. According to an aspect of an embodiment of the invention, the plurality of software components 142n can be constructed on the basis of one or more sets of predetermined rules 140„.
[0089] 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 rules 140 for constructing a SELECT query, which is a
software component 142, for an ORACLE database, wherein the version of the ORACLE database is less than 9.
2. A set of predetermined rules 140 for constructing a SELECT query, which is a
software component 142, for an ORACLE database, wherein the version of the ORACLE database is 9 or above.
3. A set of predetermined rules 140 for constructing a SELECT query, which is a
software component 142, for MICROSOFT ACCESS.
4. A set of predetermined rules 140 for constructing a report layout, which is a software component 142, in CRYSTAL REPORTS.
5. A set of predetermined rules 140 for creating a computer program, which is a
software component 142, for processing the payroll of a specific business entity. 6. A set of predetermined rules 140 for creating a software module, which is a software component 142, for calculating sales tax in accordance with a specific country's tax laws.
7. A set of predetermined rules 140 for creating a data entry form, which is a software component 142, in MICROSOFT VISUAL BASIC 6 environment.
[0090] 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 rules 140 for constructing a SELECT query, which is a
software component 142, 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 rules 140 for constructing a report layout, which is a software component 142, 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 rules 140 for creating a software module, which is a software component 142, 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.
[0091] According to an aspect of an embodiment of the invention, sub-operation 110a illustrates that the set of predetermined rules 140 has to be sufficient for constructing the software component 142.
[0092] 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 component 142.
2. A data entry form is a software component 142.
3. A message box is a software component 142.
4. An SQL query is a software component 142.
5. A lookup table is a software component 142.
6. A spreadsheet is a software component 142.
7. A video game is a software component 142.
8. A WHERE clause for an SQL query is a software component 142.
9. A software module which implements a business processing rule is a software
component 142. [0093] According to an aspect of an embodiment of the invention, sub-operation 110b illustrates that the set of predetermined rules 140 is specified in terms of a source component 144. According to an aspect of an embodiment of the invention, the set of predetermined rules 140 can be specified in terms of a plurality of source components 144n.
[0094] 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 component 144 of a report layout, which is a software
component 142.
2. Background color is a source component 144 of a data entry form, which is a
software component 142.
3. A command is a source component 144 of an SQL query, which is software
component 142.
4. A whitespace is a source component 144 of a source code block, which is a software component 142 of a computer programming language.
5. A width of a textbox is a source component 144 of a textbox object, which is a
software component 142.
6. A tax rate is a source component 144 of a tax calculation business rule, which is a software component 142.
7. A mnemonic is a source component 144 of a source code block, which is a software component 142, of an assembly language.
[0095] According to an aspect of an embodiment of the invention, sub-operation 110c illustrates that the source component 144 is represented by a "component value 146" in the software component 142. According to an aspect of an embodiment of the invention, the source component 144 can be represented by a plurality of component values 146n.
[0096] 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" x 11 " are component values 146i-4 which may be utilized to represent a paper size, which is a source component 144, of a report layout, which is a software component 142.
2. A long integer value is a component value 146 which is utilized to represent a
background color, which is a source component 144, of a data entry form, which is a software component 142.
3. SELECT, UPDATE, DELETE, INSERT INTO, CREATE DATABASE, and ALTER
DATABASE are component values 1461-6 which may be utilized to represent a command, which is a source component 144, of an SQL query, which is software component 142.
4. A space character and a tab character are component values 146i.2 which may be utilized to represent a whitespace, which is a source component 144, of a source code block, which is a software component 142, of a computer programming language.
5. A positive integer value is a component value 146 which is utilized to represent the width of a textbox, which is a source component 144, of a textbox object, which is a software component 142.
6. A numeric value is a component value 146 which is utilized to represent a tax rate, which is a source component 144, of a tax calculation business rule, which is a software component 142.
7. MOV, XOR, and CMP are component values 146i-3 which may be utilized to
represent a mnemonic, which is a source component 144, of a source code block, which is a software component 142, of an assembly language.
[0097] According to an aspect of an embodiment of the invention, at operation 112 the source component 144 is categorized into:
1. an "indeterminable source component 148", and/or
2. a "determinable source component 150"
[0098] According to an aspect of an embodiment of the invention, the indeterminable source component 148 is represented by a component value 146 which 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 component 142, or
2. 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 component 142, but is desired not to be generated for the purpose of being utilized in constructing the software component 142.
[0099] According to an aspect of an embodiment of the invention, a source component 144 may be categorized into an indeterminable source component 148 or a determinable source component 150 on the basis of the desire of a user.
[0100] In other words, categorization of a source component 144 may 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 component 144, for a report, which is a software component 142, may be categorized as an indeterminable source component 148 or as a determinable source component 150, 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 component 150, otherwise paper size will be categorized as an indeterminable source component 148.
[0101] According to an aspect of an embodiment of the invention, a component value 146, representing an indeterminable source component 148, is determined by one or more of the following:
1. utilizing a data token 152,
2. utilizing a parameter 160,
3. retrieving from a source object 166, or
4. any combinations thereof.
[0102] 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 component 148 in an SQL query, which is a software component 142.
2. A date is an indeterminable source component 148 in a WHERE clause, which is a software component 142, of an SQL query, which is also a software component 142.
3. A report title is an indeterminable source component 148 in a report layout, which is a software component 142.
4. A whitespace may be categorized as a indeterminable source component 148 in a block of source code, which is a software component 142, of JAVA programming language, because the whitespace, which is categorized as a indeterminable source component 148, can be represented by either a tab character or a space character, which are component values 146 respectively, and it is desired that the whitespace should not be determined by utilizing a computer implementable logic.
5. A command may be categorized as a indeterminable source component 148 in an
SQL query, which is a software component 142, because the command, which is categorized as a indeterminable source component 148, can be represented by SELECT, UPDATE, DELETE, INSERT INTO, CREATE DATABASE, and ALTER DATABASE, which are component values 146 respectively. Therefore, it is not possible to determine a component value 146 for the command, which is categorized as an indeterminable source component 148, by utilizing a computer implementable logic without some kind of implicit and/or explicit information about the SQL query, which is a software component 142.
[0103] According to an aspect of an embodiment of the invention, a source component 144 that is not an indeterminable source component 148, can be a determinable source component 150.
[0104] 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 component 150 in a
SELECT query, which is a software component 142, because the command, which is categorized as a determinable source component 150, can only be represented by "SELECT", which is a component value 146.
2. A whitespace may be categorized as a determinable source component 150 in a block of source code, which is a software component 142, of JAVA programming language, because the whitespace, which is categorized as a determinable source component 150, may be represented by a tab character, which is a component value 146.
3. A page number may be categorized as a determinable source component 150 in a report layout which is a software component 142, because the page number, which is categorized as a determinable source component 150, can be represented by a value, which is a component value 146, which can be determined by utilizing a computer implementable logic.
[0105] According to an aspect of an embodiment of the invention, at operation 114, a "data token 152" is defined, wherein the data token 152 is desired to be utilized for constructing a software component 142.
[0106] According to an aspect of an embodiment of the invention, a data token 152 is to be defined for a source component 144 whose component value is to be determined at runtime for constructing a software component 170 and such value cannot be determined by utilizing a computer implementable logic and/or a parameter 160. In other words a data token 152 is utilized by a software component constructor 170 for determining:
1. a component value 146, which is to be utilized for constructing a software component
142, 2. a manner in which a component value 146 is to be utilized for constructing a software component 142,
3. a manner in which a software component 142 is constructed, or
4. any combinations thereof.
[0107] According to an aspect of an embodiment of the invention, a data token 152 is to be defined for:
1. determining a component value 146, of an indeterminable source component 148 and/or a determinable source component 150, which is desired to be determined at runtime for constructing a software component 170 but cannot be determined by utilizing a computer implementable logic and/or a parameter 160,
2. determining a manner in which a component value 146 is utilized for constructing a software component 170, wherein such manner is desired to be determined at runtime but cannot be determined by utilizing a computer implementable logic and/or a parameter 160, or
3. any combinations thereof.
[0108] In other words, a data token 152 has to be defined for determining, at runtime, a component value 146 and/or a manner in which a software component 142 is to be constructed, wherein it is desired to determine, at runtime, a component value 146 and/or a manner in which a software component 142 is to be constructed, and wherein such determination cannot be made by utilizing a computer implementable logic and/or a parameter 160 for constructing software component 142.
[0109] According to an aspect of an embodiment of the invention, a data token 152 is defined to automate construction of a software component at runtime by utilizing a computer implementable logic.
[0110] According to an aspect of an embodiment of the invention, association of a token value 154 with a component value 146 enables a software component constructor 170 to determine a place where a specific type of computer implemented logic needs to be applied. In other words, association of a token value 154 with a component value 146 enables a software component constructor 170 to act like a human software developer.
[0111] In other words, a data token 152 is defined to enable a machine (computer) to a perform task, during construction of a software component 142 at runtime, which normally requires a 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 token 152, represented by a token value 154, enables a machine to determine what, when, and where a task has to be performed.
[0112] According to an aspect of an embodiment of the invention, a data token 152 is created along with a set of data token rules 156 that specifies a manner in which a token value 154 can be created, a manner in which a token value 154 can be associated to a component value 146, and a manner in which a token value 154 can be processed, wherein processing of a token value 154 produces a token result 156, wherein a token result 156 is utilizable for constructing a software component 142.
[0113] According to an aspect of an embodiment of the invention, a token value 154 is retrieved by utilizing a parameter value 162.
[0114] According to an aspect of an embodiment of the invention, a token value 154 is utilized without being processed.
[0115] According to an aspect of an embodiment of the invention, a token value 154 is processed by utilizing a parameter value 162.
[0116] According to an aspect of an embodiment of the invention, a token value 154 is utilized without processing for constructing a software component 142.
[0117] According to an aspect of an embodiment of the invention, processing of a token value 154 comprises executing a set of instructions which are executable by a processor.
[0118] According to an aspect of an embodiment of the invention, a token value 154 is embedded in a component value 146.
[0119] According to an aspect of an embodiment of the invention, a token value 154 is implicitly (virtually) associated with a component value 146.
[0120] According to an aspect of an embodiment of the invention, a component value 146 is retrieved by utilizing a token value 156.
[0121] According to an aspect of an embodiment of the invention, a component value 146 is retrieved by utilizing a parameter value 162.
[0122] According to an aspect of an embodiment of the invention, sub-operation 114a illustrates that a data token 152 is represented by a token value 154. [0123] According to an aspect of an embodiment of the invention, sub-operation 114b illustrates that a "token result 156" may be obtained by processing a token value 154, wherein the token value 154 is processed by utilizing a "parameter" 160.
[0124] According to an aspect of an embodiment of the invention, sub-operation 114c illustrates that the data token 152 comprises a "set of data token rules 158", wherein the set of data token rules 158 is defined along with the data token 152. According to an aspect of an embodiment of the invention, the set of data token rules 158 comprises one or more rules which specify one or more manners in which the data token 152 is desired to be utilized for constructing the software component 142. According to an aspect of an embodiment of the invention, the set of data token rules 158 specifies one or more manners in which the data token 152 is:
1. represented by a token value 154.
2. implicitly and/or explicitly associated, by way of a token value 154, with a component value 146.
3. utilized for constructing a software component 142.
4. processed for obtaining a token result 156 and then a token result 156 is utilized for constructing a software component 142.
[0125] A token value 154 may be associated with a component value 146 implicitly, wherein implicit association is implemented in a software component constructor 170. By way of an example, and not a limitation, a software component constructor 170 may assume that a token value 154 is associated with each component value 146 of a source component 144. As another example a software component constructor 170 may assume that a token value 154 is associated with a specific type of component values 146n of a source component.
[0126] A token value 154 may be associated with a component value 146 explicitly, wherein a token value 154 is explicitly associated with a component value 146 of a source component 144. Explicit association can be done in a source object 166 and/or in a software component constructor 170.
[0127] The data token 152 is utilized to automate tasks, in constructing the software component 142, which are normally performed by a human being.
[0128] The data token 152 can be utilized to automate all tasks which are required for constructing the software component 142, and which can be performed on the basis of an algorithm and/or a computer implementable logic. [0129] According to an aspect of an embodiment of the invention, a token value 154 of a data token 152 may be determined by utilizing a parameter value 162 of a parameter 160.
[0130] 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 value 146 for constructing a software component 142.
2. For changing a component value 146 for constructing a software component 142.
3. For determining an appropriate component value 146 for constructing a software component 142.
4. For determining an appropriate component value 146 for a source component 144.
5. For retrieving a component value 146 for constructing a software component 142.
6. For determining an order of a plurality of component values 146„ for constructing a software component 142.
7. For reusing a component value 1 6 for constructing a software component 142.
8. For reusing a plurality of component values 146„ for constructing a software
component 142.
9. For changing a manner in which a software component 142 is to be constructed.
[0131] A data token 152 can also be utilized in numerous other ways to automate any part of constructing a software component 142 which can be automated on the basis of an algorithm and/or a computer implementable logic.
[0132] A data token 152 can 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 value 154 of a data token 152, a network connection may be established, a new program may be started, an existing program may be terminated, a component value 146 may be resolved from a database table, a user input may be acquired, an interaction with an user may be invoked, one or more software components 142„ may be constructed, a machine may be started, a machine may be stopped, and the like.
[0133] A data token 152 can 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.
[0134] According to an aspect of an embodiment of the invention, at operation 116, one or more parameters 160„ are defined. [0135] According to an aspect of an embodiment of the invention, a parameter 160 is defined for enabling a user to define a component value 146 and/or a token value 154 at runtime. In other words, a parameter 160 enables a user to control the construction of a software component 142 at runtime.
[0136] A parameter 160, represented by a parameter value 162, is utilized to enable a user to interact with and/or direct/control the process of constructing a software component 142, according to the desire and/or requirement of the user, via input of component values 146n and/or token values 154n in the form parameter of values 162„. In other words, a component value 146, and/or a token value 154 may be determined at runtime by a parameter value 162, wherein a parameter value is an input by a user, at runtime.
[0137] According to an aspect of an embodiment of the invention, a parameter 160 may be utilized by a software component constructor 170 for constructing a software component 142, wherein the software component constructor 170 determines a manner in which a software component 142 is constructed on the basis of a parameter 160.
[0138] According to an aspect of an embodiment of the invention, a parameter 160 is defined for determining a source object 166 which is to be utilized for constructing a software component 142.
[0139] According to an aspect of an embodiment of the invention, sub-operation 116a illustrates that a parameter 160 is represented by a "parameter value 162" which is specified and/or input by a user, wherein a parameter value 162 is a data value. The parameter 160 may also be defined with a default parameter value 162.
[0140] The parameter value 162 can be specified and/or input by a user either each time the parameter 160 is utilized or only at a time when the user wants to change the parameter value 162 which the user has already specified; in the latter case, the parameter value 162 may.
1. have to be specified for the first time by a user, and/or
2. be stored in a computer readable recording medium and utilized, whenever required, by retrieving from the computer readable recording medium.
[0141] According to an aspect of an embodiment of the invention, a parameter 160 may also be defined for determining a component value 146 of an indeterminable source component 148. [0142] 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 component 142, which
comprises a plurality of report columns, a parameter 160 may 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 component 142, a parameter 160 may 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 component 142, a parameter
160 is defined for determining a value for a paper size, wherein the paper size is an indeterminable source component 148.
[0143] A user can specify the parameter value 162 by 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.
[0144] According to an aspect of an embodiment of the invention, at operation 118, a data model 164 is created, wherein the data model 164 is suitable and is sufficient for creating a "source object repository 168", wherein the source object repository 168 is suitable and sufficient for:
1. Compulsorily:
a. Storing a "source object 166", wherein the source object 166 is sufficient for comprising one or more component values 146n representing one or more indeterminable source components 148n.
b. Identifying, resolving, and retrieving the source object 166.
2. Optionally, if desired:
a. Storing a plurality of source objects 166„.
b. Identifying, resolving, and retrieving a source object 166 out of the plurality of source objects 166n. In such a case, the source object repository 168 should also provide a mechanism which enables an identification of a source object 166 out of the plurality of source objects 166n.
c. Implementing and maintaining, in a desired manner, a desired hierarchy and/or a desired relationship between a plurality of source components 144n, wherein both the desired hierarchy and/or the desired relationship are determined on the basis of:
i. the set of predetermined rules 140, and/or
ii. a role and/or a purpose of the component value 146 in a software component 142.
d. Implementing and maintaining a desired order among a plurality of component values 146n.
e. Utilizing a source object 166, out of a plurality of source objects 166n and/or a desired part thereof, in another source object 166, out of the plurality of source objects 166„.
f. Associating, in accordance with the set of data token rules 158, a token value 154 with a component value 146 and/or with another token value 154 that is comprised by a source object repository 168. A token value 154 may be associated by one or more of the following:
i. embedding in a component value 146,
ii. embedding in a source object 166,
iii. associating, implicitly, with a component value 146 stored in the source object repository 168,
iv. associating with a component value 146, stored in a source object repository 168, by utilizing a reference value, wherein the reference value is a data value, or
v. any combinations thereof, or
g. Any combinations thereof.
[0145] According to an aspect of an embodiment of the invention, the data model 164 comprises one or more attributes (which may also be called fields or columns) for storing component values 146„ for all indeterminable source components 148„· for which neither a data token 152 is defined, nor a parameter 160 is defined.
[0146] Sub-operation 118a specifies that the data model 164, created at operation 118, is sufficient for storing a source object 166.
[0147] According to an aspect of an embodiment of the invention, the source object repository 168 is created, at operation 120, in a desired manner and on the basis of the data model 164. According to an aspect of an embodiment of the invention, the source object repository 168 is created by utilizing one or more of the following:
1. structured data, 2. semi-structured data, and
3. any combinations thereof.
[0148] According to an aspect of an embodiment of the invention, a source object repository 168 may be created by utilizing any suitable data structure which may include, but is not limited to, a data base table, a comma separated text file, a spreadsheet, a matrix, an object, an array, a set of variables, and a linked list.
[0149] According to an aspect of an embodiment of the invention, a source object repository 168 is sufficient for storing a source object 166, wherein a source object 166 comprises an indeterminable source component 148 represented by a component value 146, wherein the indeterminable source component 148 is to be utilized for constructing a software component 142.
[0150] According to an aspect of an embodiment of the invention, a source object repository 168 is enables identification of a component value 146 in the source component repository 168 wifh reference to the source object 166 and an indeterminable source component 148 which is represented by the component value 146.
[0151] According to an aspect of an embodiment of the invention, a source object repository 168 comprises a token value 154 which can:
1. be associated with a component value 146,
2. refer to a component value 146 which is stored in the same source object 166 in which token value 154 is stored,
3. refer to a component value 146 which is stored in another source object 166, or
4. any combinations thereof.
[0152] According to-an aspect of an embodiment of the invention, a source object repository
168 comprises a plurality of source components 144n in a desired hierarchy.
[0153] According to an aspect of an embodiment of the invention, a source object repository 168 comprises a plurality of component values 146n in a desired order.
[0154] According to an aspect of an embodiment of the invention, a source object 166 stored in a source object repository 168 is uniquely identifiable.
[0155] According to an aspect of an embodiment of the invention, at operation 122, a "software component constructor 170" is created, wherein the software component constructor 170 is a computer program which is sufficient for constructing a software component 142 on the basis of a set of predetermined rules 140 and by utilizing one or more of the following:
1. a component value 146 representing a source component 144,
2. a parameter value 162 of a parameter 160,
3. a token value 154 that represents a data token 152, and
4. any combinations thereof.
[0156] According to an aspect of an embodiment of the invention, a software component constructor 170 utilizes a data model 164 of a source object 166 by way of a source object repository 168 for retrieving the source object 166.
[0157] According to an aspect of an embodiment of the invention, the software component constructor 170 comprises and implements the set of predetermined rules 140 of a software component 142.
[0158] According to an aspect of an embodiment of the invention, a set of predetermined rules 140 may also be adapted in a desired manner for creating a software component constructor 170 to the extent that a software component 142 can be constructed by utilizing the adapted set of predetermined rules 140.
[0159] According to an aspect of an embodiment of the invention, a set of predetermined rules 140 can be adapted, as may be desired and/or required, for constructing a software component constructor 170, wherein the adaptation is done in a manner that no rule of the set of predetermined rules 140 is violated to the extent that a software component 142 cannot 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 rules 140 has to be sufficient for enabling a software component constructor 170 to construct a software component 142 on the basis of set of predetermined rules 140 and by utilizing one or more of the following:
1. a component value 146,
2. a token value 154, and
3. any combinations thereof .
[0160] According to an aspect of an embodiment of the invention, a software component constructor 170 utilizes a data token 152 during construction of a software component 142, wherein a software component constructor 170 utilizes, at runtime, a data token 152 for determining: 1. a component value 146,
2. a manner in which a component value 146 is utilized for constructing a software component 142,
3. a manner in which a software component 142 is constructed, or
4. any combinations thereof.
[0161] In other words, a software component constructor 170 utilizes a data token 152 to work like a human developer for constructing a software component 142. A software component constructor 170 utilizes.
[0162] By way of an example, and not a limitation, a software component constructor 170 can 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 constructor 170 can also be integrated with a computer program for constructing, at runtime, as many software components as may be desired. The integration of software component constructor 170 can be done by either utilizing an API (Application Programming Interface) or directly incorporating software component constructor 170 in a computer program with which the integration of software component constructor 170 is desired.
[0163] According to an aspect of an embodiment of the invention, a software component constructor 170 constructs a software component 142 at runtime according to the desire, specified by way of a parameter 160, of a user. In other words, a layer of a computer program, which receives one or more parameter 160n from a user, may be integrated with a software component constructor 170, wherein the software component constructor 170 constructs one or more software components in response to the input parameters 160„.
[0164] According to an aspect of an embodiment of the invention, a software component constructor 170 may construct a plurality of software components 142n by utilizing a source object 166, a data token 152, and a parameter 160. In other words, a parameter 160 and a data token 152 enable a software component constructor to construct more than one software components 142n from a source object 166.
[0165] According to an aspect of an embodiment of the invention, three sub-operations 122a, 122b and 122c are connected to the operation 122. Each of the sub-operations 122a, 122b and 122c illustrates creation of a module, which is a computer program, wherein the module may be required for constructing a software component 142. Each of the modules created in sub-operations 122a, 122b and 122c can be either: 1. an independent computer program which is linked and/or integrated with the software component constructor 170, or
2. a computer program which is an integral part of the software component constructor
170, or
3. a computer program which is linked with the software component constructor 170 via 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, or
4. any combinations of the above.
[0166] According to an aspect of an embodiment of the invention, at sub-operation 122a, a "parameter resolution module 170a" is created. The parameter resolution module 170a is utilized for resolving a parameter value 162. A parameter value 162 may 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, and
j. any combinations thereof.
2. reading from a computer readable medium, and
3. any combinations thereof.
[0167] According to an aspect of an embodiment of the invention, the parameter resolution module 170a may also resolve the parameter value 162 from a computer readable recording medium and/or by utilizing an algorithm and/or a computer executable logic.
[0168] According to an aspect of an embodiment of the invention, at sub-operation 122b, a "data token processing module 170b" is created. The data token processing module 170b is utilized for processing a token value 154. The data token processing module 170b
processes the token value 154 on the basis of the set of data token rules 158.
[0169] According to an aspect of an embodiment of the invention, at sub-operation 122c, a "source object resolution module 170c" is created. The source object resolution module 170c is utilized for identifying a source object 166 and then resolving a component value 146 from the source object 166.
[0170] The source object resolution module 170c can be identified in many ways, which may include, but are not limited to, a utilization of a parameter value 162, a utilization of an algorithm and/or a computer implementable logic, a utilization of a token value 154, and/or any combinations thereof.
[0171] According to an aspect of an embodiment of the invention, while resolving a component value 146 from a source object 166, the source object resolution module 170c may also utilize a parameter value 162 which is resolved by a parameter resolution module 170a, and/or may utilize a token value 154 which is processed by a data token processing module 170b.
[0172] According to an aspect of an embodiment of the invention, while resolving a component value 1461 from a source object 166i, a source object resolution module 170c may also resolve another component value 1462 from another source object 1662, wherein the source object 1662 is referenced in the source object 166-|.
[0173] According to an aspect of an embodiment of the invention, while resolving the component value 146 from a source object 66, the source object resolution module 170c may also resolve a plurality of component values 146„ from a plurality of source objects 166n, wherein the plurality of source objects 166n are referenced in the source object 166.
[0174] According to an aspect of an embodiment of the invention, while resolving the component value 146 from a source object 166, the source object resolution module 170c may also change, drop, and/or add a component value 146 on the basis of utilizing a token value 154.
[0175] According to an aspect of an embodiment of the invention, at operation 124, a source object 166 is created, wherein the source object 166 is sufficient for constructing a software component 142, and wherein the source object 166 is to be utilized for constructing the software component 142. The creation of the source object 166 may also include creation and association of a token value 154, to a component value 146 and/or another token value 154, of a data token 152 on the basis of a set of data token rules 158. According to an aspect of an embodiment of the invention, the source object 166 is stored in a source object repository 168.
[0176] According to an aspect of an embodiment of the invention, at operation 124, a token value 154, representing a data token 152, may be created and associated with a component value 146 representing a source component 144 comprised by a source object 166.
[0177] According to an aspect of an embodiment of the invention, a source object 166 is created, wherein a source object 166 comprises a component value 146 which represents an indeterminable source component 148, and wherein the component value 146 is utilized for constructing a software component 142.
[0178] According to an aspect of an embodiment of the invention, a source object 166 is created in a manner that a token value 154 can be associated with a component value 146 in a manner that the token value 154 can be utilized and or processed.
[0179] According to an aspect of an embodiment of the invention, utilization of a token value 154 determines a manner in which a component value 146 is utilized for constructing a software component 142.
[0180] According to an aspect of an embodiment of the invention, utilization of a token value 154 determines that a component value 146 is not to be utilized for constructing a software component 142.
[0181] According to an aspect of an embodiment of the invention, utilization of a token value 154 determines that a component value 146 is to be processed, and then the processed component value is to be utilized for constructing a software component 142.
[0182] According to an aspect of an embodiment of the invention, utilization of a token value 154 determines that a component value 146 is to be modified, and then the modified component value 146 is to be utilized for constructing a software component 142.
[0183] According to an aspect of an embodiment of the invention, utilization of a token value 154 determines that a component value 146 is to be changed, and then the changed component value 146 is to be utilized for constructing a software component 142.
[0184] According to an aspect of an embodiment of the invention, utilization of a token value 154 determines that a component value 146 is to be utilized for creating another component value 146, and then another created component value 146 is to be utilized for constructing a software component 142.
[0185] According to an aspect of an embodiment of the invention, a token value 154 is embedded in a component value 146.
[0186] According to an aspect of an embodiment of the invention, a token value 154 is embedded in a source object 166.
[0187] According to an aspect of an embodiment of the invention, a source object 166 comprises a component value 146 which is not comprised in a software component 142.
[0188] According to an aspect of an embodiment of the invention, a source object 166 comprises a component value 146, which is not comprised in a software component 142, is determined by utilizing:
1. a token value 154,
2. a token result 156,
3. a parameter value 162,
4. a software component constructor 170, or
5. any combinations thereof.
[0189] According to an aspect of an embodiment of the invention, utilization of a token result 156 determines a manner in which a component value 146 is utilized for constructing a software component 142.
[0190] According to an aspect of an embodiment of the invention, utilization of a token result 156 determines that a component value 146 is not to be utilized for constructing a software component 142.
[0191] According to an aspect of an embodiment of the invention, utilization of a token result 156 determines that a component value 146 is to be processed, and then the processed component value is to be utilized for constructing a software component 142.
[0192] According to an aspect of an embodiment of the invention, utilization of a token result 156 determines that a component value 146 is to be modified, and then the modified component value 146 is to be utilized for constructing a software component 142. [0193] According to an aspect of an embodiment of the invention, utilization of a token result 156 determines that a component value 146 is to be changed, and then the changed component value 146 is to be utilized for constructing a software component 142.
[0194] According to an aspect of an embodiment of the invention, utilization of a token result 156 determines that a component value 146 is to be utilized for creating another component value 146, and then another created component value 146 is to be utilized for constructing a software component 142.
[0195] According to an aspect of an embodiment of the invention, at operation 126, a software component 142 is constructed by utilizing a software component constructor 170. An exemplary construction of the software component 142 is explained in greater detail in Fig. 2.
[0196] According to an aspect of an embodiment of the invention, following steps are performed by a software component constructor 170 for constructing a software component 142:
1. Accepts a parameter value 162 from a user.
2. Identifies a source object 166.
3. Retrieves a source object 166 from a source object repository 168.
4. Retrieves a component value 146 of an indeterminable source component 148 from the retrieved source object 166.
5. Processes a token value 154 to obtain a token result 156.
6. Constructs a software component 142 on the basis of a set of predetermined rules
140, of the software component 142, and by utilizing the parameter value 162, the component value 146 of the indeterminable source component 148, a component value 146 of a determinable source component 150, and a token result 156.
[0197] According to an aspect of an embodiment of the invention, a token value 154 is not processed for constructing a software component 142. In other words, a token value 154 may be utilized without being processed for constructing a software component 142.
[0198] According to an aspect of an embodiment of the invention, a parameter value 162 is not utilized for constructing a software component 142.
[0199] According to an aspect of an embodiment of the invention, a parameter value 162 is utilized for processing a token value 154. [0200] According to an aspect of an embodiment of the invention, a component value 146 of a determinable source component 150 is not utilized for constructing a software component 142.
[0201] According to an aspect of an embodiment of the invention, a component value 146 of an indeterminable source component 148 is not utilized for constructing a software component 142.
[0202] At operation 128, it is decided whether another source object 166 is required or not. If another source object 166 is required, then the flow continues to operation 124. Otherwise, the flow moves to operation 130.
[0203] Creation of another source object 166 will be required whenever existing source objects 166n are not sufficient for constructing a desired source component 142.
[0204] At operation 130, it is decided whether another software component 142 is to be constructed or not. If another software component 142 is to be constructed, then the flow continues to operation 126. Otherwise, the flow moves to terminal 132.
[0205] At terminal 132, this flowchart ends.
[0206] A terminal 134 is utilized as another starting point to illustrate that the source object 166, the software component constructor 170, and the source object repository 168 may be utilized as many times as desired.
9. An embodiment according to an aspect of the invention (Fig. 2)
[0207] Fig. 2 illustrates an exemplary flowchart of an exemplary working of software component constructor 170 created at operation 122 in Fig. 1 B. This flowchart illustrates only one mode of implementation of software component constructor 170 in accordance with an aspect of an embodiment of the invention. Any person who is skilled in the art can construct software component constructor 170 in many different manners. In other words, Fig. 2 explains operation 126 in greater detail.
[0208] At terminal 212, software component constructor 170 starts.
[0209] According to an aspect of an embodiment of the invention, at operation 214, the parameter resolution module 170a resolves one or more parameter values 162n wherein the parameter values 162„ are required for constructing one or more desired software components 142n. [0210] According to an aspect of an embodiment of the invention, at operation 216, source objects 166„ are identified by the source object resolution module 170c, wherein the source objects 66n are required to be utilized for constructing the desired software components 142n.
[0211] According to an aspect of an embodiment of the invention, at operation 218, component values 146„ are resolved by the source object resolution module 170c from the source objects 166„. According to an aspect of an embodiment of the invention, the source object resolution module 170c may also utilize, for resolving the component values 146n, one or more of the following:
1. one or more parameter values 162n,
2. one or more token values 154n, wherein one or more token values 154n may be processed by the data token processing module 170b, and
3. any combinations thereof.
[0212] At operation 220, the software component constructor 170 constructs the desired software components 142„ on the basis of sets of predetermined rules 140„, and by utilizing one or more of the following:
1. The parameter values 162„.
2. The token values 154-,, wherein the token values 154n may be processed by the data token processing module 170b.
3. The resolved component values 146„, and
4. Any combinations thereof.
[0213] At terminal 224, the construction of the desired software components 142n ends.
10. An exemplary environment for carrying out an aspect of an
embodiment of the invention
[0214] Fig. 3 illustrates an exemplary block diagram of an exemplary computing system environment 300 which is suitable for an implementation of an aspect of an embodiment of the invention. Computing system environment 300 includes an exemplary computer 302, an exemplary display unit 330, an exemplary printer 332, an exemplary speaker 334, an exemplary keyboard 336, an exemplary pointing device 338, an exemplary microphone 340, an exemplary digitizer 342, and an exemplary expansion card 344. Computer 302 is connected to an exemplary remote computer(s) 354 so as to work in a networked environment, wherein remote computer(s) 354 is connected to computer 302 via an exemplary communication link 350. Moreover, an exemplary network auxiliary storage 352 is connected to computer 302 via communication link 350, and an exemplary remote auxiliary storage 356 is connected to computer 302 via remote computer(s) 354. Communication link 350 is connected to computer 302 via an exemplary communication interface 326.
[0215] Computing system environment 300 in Fig. 3 illustrates 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 environment 300 inclusive of all the exemplary components incorporated therein. Additionally, computing system environment 300 should not be interpreted as having any dependency on any one and/or any combinations of the components illustrated in computing system environment 300. Furthermore, computing system environment 300 is not limited to the illustrated components; the number of components may be more or less in other configurations and/or environments.
[0216] In addition to computing system environment 300, 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.
[0217] The components illustrated in computer 302 include an exemplary processor 304, an exemplary bus 306, an exemplary computer memory 308, an exemplary ROM 310 (Read Only Memory), an exemplary BIOS 312 (Basic Input Output System), an exemplary RAM 314 (Random Access Memory), an exemplary auxiliary storage interface 316, an exemplary auxiliary storage 318, an exemplary video controller 320, an exemplary input/output interface unit(s) 322, an exemplary expansion interface 324, and communication interface 326.
[0218] Processor 304, which may be utilized in a plurality, is connected to bus 306.
Processor 304 may include, but is not limited to, a microprocessor, a RISC (Reduced Instruction Set Computer) processor, and a CISC (Complex Instruction Set Computer) processor.
[0219] Bus 306, which connects one or more components to processor 304 for facilitating data exchange between processor 304 and the connected one or more components, may comprise one or more of the following:
1. a system bus,
2. a peripheral bus, and/or
3. any combinations thereof.
[0220] 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.
[0221] Bus 306 may 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.
[0222] Bus 306 may also provide for adding one or more input/output components to expansion interface 324 by utilizing expansion card 344. Expansion interface 324 and expansion card 344 may support one or more bus types that are supported by bus 306.
[0223] Expansion interface 324 may 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.
[0224] Expansion card 344 may 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.
[0225] Computer 302 typically requires a memory which is represented in Fig. 3 as computer memory 308. Computer memory 308 comprises ROM 310 and RAM 314.
However, computer memory 308 is not limited to ROM 310 and/or RAM 314, and may include any other type and/or form of memory that may be accessed directly by processor 304. Computer memory 308 is connected to bus 306 for storing information and instructions to be executed by processor 304. Moreover, contents of computer memory 308 may also include contents that are being currently operated upon by processor 304. For this purpose, bus 306 connects computer memory 308 to processor 304.
[0226] For a start-up, computer 302 typically 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 ROM 310 in the Fig. 3.
[0227] ROM 310 may 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.
[0228] ROM 310 typically stores BIOS 312, wherein BIOS 312 comprises computer start-up routines and other basic routines that facilitate transfer of information between various components of computer 302. ROM 310 may also store an operating system, a device driver, an application program, a data structure, other program modules, a static application data and the like.
[0229] Computer 302 also typically requires a volatile memory, which is represented by RAM 314 in the Fig. 3. RAM 314 is generally utilized for storing a computer program, and information/instructions to be executed by processor 304. RAM 314 may also be utilized for storing temporary variables or other intermediate data during the execution of the instructions by processor 304.
[0230] RAM 314 is 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).
[0231] In computer 302, processor 304 can access the contents of ROM 310 and RAM 314 directly by utilizing bus 306. Moreover, the contents of ROM 310 and RAM 314 may include contents that are being currently operated upon by processor 304.
[0232] Auxiliary storage interface 316 facilitates connectivity between auxiliary storage 318 and computer 302 via bus 306. Auxiliary storage 318 may also be connected to computer 302 through communication link 350 as network auxiliary storage 352 and/or through remote computer(s) 354 as remote auxiliary storage 356. Auxiliary storage 3 8 provides 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 data base, and an application data.
[0233] Auxiliary storage interface 316 may 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.
[0234] Auxiliary storage 318 may 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.
[0235] Auxiliary storage 318 may 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. [0236] Display unit 330 is typically connected to computer 302 though an interface which is video controller 320 in computing system environment 300. Display unit 330 and video controller 320 may be used in a plurality.
[0237] Display unit 330 and video controller 320 may 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.
[0238] Display unit 330 and video controller 320 may 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.
[0239] A touch screen panel (not shown in the Fig. 3) may also be attached to display unit 330, wherein display unit 330 is utilized to display an output, and the touch screen is utilized as an input device.
[0240] Computing system environment 300 may include other output devices that may be connected to bus 306 through input/output interface unit(s) 322.
[0241] Input/output interface unit(s) 322 may 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.
[0242] In computing system environment 300, the following six input/output devices have been illustrated:
1. printer 332,
2. speaker 334,
3. keyboard 336,
4. pointing device 338,
5. microphone 340 and
6. digitizer 342.
[0243] 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.
[0244] Computer 302 may also typically operate in a networked environment wherein computer 302 is connected to other computers, such as remote computer(s) 354, by utilizing communication link 350, wherein communication link 350 is established by utilizing communication interface 326, wherein communication interface 326 is coupled with bus 306.
[0245] Remote computer(s) 354 may include, but is not limited to, a computer similar to computer 302, 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.
[0246] Computer 302 and remote computer(s) 354 may 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.
[0247] Communication interface 326, which is coupled to bus 306, provides a two-way data communication coupling via communication link 350, wherein communication link 350 is utilized for connecting computer 302 with other components such as network auxiliary storage 352, remote computer(s) 354, and remote auxiliary storage 356.
[0248] Communication interface 326 may 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). [0249] Communication link 350 facilitates 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).
[0250] Communication link 350 may 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.
[0251] Communication link 350 may 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 highspeed 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.
[0252] Communication link 350 may 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.
[0253] Communication link 350 may 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).
[0254] Remote computer(s) 354 and communication link 350 may 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 to 10Z)
[0255] Figs. 4A to 10Z illustrate detailed steps which are required, according to an aspect of an embodiment of the invention, for constructing desired exemplary SQL queries, which are software components 142n, for MICROSOFT ACCESS and/or ORACLE databases. These steps include:
1. Creating a source object repository 168 (an example of operation 20 illustrated in Fig.
1 A), illustrated in Figs. 4A to 7C. Creation of a source object repository 168 is further explained in detail as follows:
a. Selecting one or more sets of predetermined rules 140„ (an example of operation 110 illustrated in Fig. 1 B), illustrated in Figs. 4A to 4R. b. Categorizing source components 144n in to indeterminable source components 148n and determinable source components 150„ (an example of operation 112 illustrated in Fig. 1 B), illustrated in Figs. 4S and 4T. c. Defining data tokens 152n (an example of operation 114 illustrated in Fig. 1 B) along with their respective sets of data token rules 158n, illustrated in Figs. 5A to 5C.
d. Defining parameters 160„ (an example of operation 116 illustrated in Fig. 1 B), illustrated in Fig. 6.
e. Creating a data model 164 (an example of operation 118 illustrated in Fig.
1 B), illustrated in Figs. 7A to 7B.
f. Creating a source object repository 168 (an example of operation 120 illustrated in Fig. 1 B), illustrated in Fig. 7C.
2. Creating a software component constructor 170 (an example of operation 30
illustrated in Fig. 1 A), illustrated in Figs. 8A to 8X. 3. Constructing one or more software components 142„ (an example of operation 40 illustrated in Fig. 1A), illustrated in Figs. 9A to 10Z.
a. Creating source objects 166„ (an example of operation 124 illustrated in Fig.
1 B), illustrated in Figs. 9A to 90.
b. Constructing software components 142„ (an example of operation 126
illustrated in Fig. 1 B), illustrated in Figs. 10A to 10Z.
[0256] Figs. 4A to 1 OZ illustrate 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.
[0257] The term "desired query", wherever used in the detailed description of Figs. 4A to 10Z, is intended to refer to one or more queries, an example of software component 142, which is to be constructed by utilizing the embodiments illustrated in Figs. 4A to 90.
[0258] The term "queryBuilder", wherever used in the description of Figs. 4A to 10Z, is intended to refer to an example of the software component constructor 170. queryBuilder is an exemplary embodiment developed in accordance with certain principles of the invention and is illustrated in Figs. 8A to 8P. However, the invention is not, in any way, dependent on or restricted by queryBuilder.
[0259] The syntax diagrams, of the exemplary sets of predetermined rules, illustrated in Figs. 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.
[0260] The embodiments illustrated in Figs. 4A to 90 do not include any error checking and/or exception handling; it is assumed that all the embodiments are utilized correctly.
[0261] The embodiments illustrated in Figs. 4A to 90 are 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, or
2. ORACLE, or 3. both MICROSOFT ACCESS and ORACLE.
[0262] Fig. 4A illustrates two exemplary sets of predetermined rules 400, selected according to an aspect of an embodiment of the invention, wherein the two exemplary sets of predetermined rules 400 include a set of predetermined rules for ACCESS SELECT query 401 , which is an example of the set of predetermined rules 140, and a set of predetermined rules for ORACLE SELECT query 402, which is also an example of the set of predetermined rules 140.
[0263] The set of predetermined rules for ACCESS SELECT query 401 comprises 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.
[0264] The set of predetermined rules for ORACLE SELECT query 402 comprises 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.
[0265] Figs. 4B to 4K illustrate the set of predetermined rules for ACCESS SELECT query 401 in 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.
[0266] A circle, such as 410a, 410b, 411a, and the like, represents an entry point and an end point in a syntax diagram.
[0267] 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 include 470a, 470b, 470c, 471a, 471b, 472a, 472b, and the like. Each terminal is an example of the source component 144.
[0268] Non-terminals include 401 , 402, 410, 411 , 412, and the like.
[0269] Decision boxes illustrated from Figs. 4B to 4R are implemented in the flowchart illustrated in Figs. 8A to 8P. [0270] In Fig. 4B entry-point 401a illustrates a starting point of ACCESS SELECT query 401 , and end-point 401 b illustrates an ending point of ACCESS SELECT query 401. Fig. 4B also illustrates two non-terminal boxes 410 and 411 , which are illustrated in greater detail in Fig. 4C and Fig. 4D respectively.
[0271] Fig. 4C illustrates non-terminal box 410 in greater detail. Entry-point 410a and end-point 410b of non-terminal box 410 are also illustrated in Fig. 4C. Three non-terminal boxes 412, 413 and 414 are also illustrated in Fig. 4C. The three non-terminal boxes 412, 413 and 414 are illustrated in greater detail in Figs. 4E, 4F, and 4G respectively.
[0272] Fig. 4D illustrates non-terminal box 411 in greater detail. Entry-point 411a and end- point 411 of non-terminal box 411 are also illustrated in Fig. 4D.
[0273] Fig. 4E illustrates non-terminal box 412 in greater detail. Entry-point 412a and end- point 412b of non-terminal box 412 are also illustrated in Fig. 4E. A non-terminal box 415 is also illustrated in Fig. 4E. Non-terminal box 415 is illustrated in greater detail in Fig. 4H.
[0274] Fig. 4F illustrates non-terminal box 413 in greater detail. Entry-point 413a and end- point 413b of non-terminal box 413 are also illustrated in Fig. 4F. Three non-terminal boxes 416, 417 and 418 are also illustrated in Fig. 4F. The three non-terminal boxes 416, 417 and 418 are illustrated in greater detail in Figs. 41, 4J, and 4K respectively.
[0275] Fig. 4G illustrates non-terminal box 414 in greater detail. Entry-point 414a and end- point 414b of non-terminal box 414 are also illustrated in Fig. 4G.
[0276] Fig. 4H illustrates non-terminal box 415 in greater detail. Entry-point 415a and end- point 415b of non-terminal box 415 are also illustrated in Fig. 4H.
[0277] Fig. 4I illustrates non-terminal box 416 in greater detail. Entry-point 416a and end- point 416b of non-terminal box 416 are also illustrated in Fig. 4I. Non-terminal box 410 is also illustrated in Fig. 4I. Non-terminal box 410 is illustrated in greater detail in Fig. 4C.
[0278] Fig. 4J illustrates non-terminal box 417 in greater detail. Entry-point 417a and end- point 417b of non-terminal box 417 are also illustrated in Fig. 4J.
[0279] Fig. 4K illustrates non-terminal box 418 in greater detail. Entry-point 418a and end- point 418b of non-terminal box 418 are also illustrated in Fig. 4K.
[0280] Figs. 4L to 4R illustrate the set of predetermined rules for ORACLE SELECT query 402 in 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.
[0281] In Fig. 4L, entry-point 402a illustrates starting point of the set of predetermined rules for ORACLE SELECT query 402 and end-point 402b illustrates ending point of the set of predetermined rules for ORACLE SELECT query 402. Fig. 4L also illustrates two non-terminal boxes 430 and 411 which are illustrated in greater detail in Fig. 4M and Fig. 4D respectively.
[0282] Fig. 4M illustrates non-terminal box 430 in greater detail. Entry-point 430a and end- point 430b of non-terminal box 430 are also illustrated in Fig. 4M. Four non-terminal boxes 431 , 432, 433 and 414 are also illustrated in Fig. 4M. The four non-terminal boxes 431 , 432, 433 and 414 are illustrated in greater detail in Figs. 4N, 40, 4P, and 4G respectively.
[0283] Fig. 4N illustrates non-terminal box 431 in greater detail. Entry-point 431a and end- point 431 b of non-terminal box 431 are also illustrated in Fig. 4N. Non-terminal box 434 is also illustrated in Fig. 4N. Non-terminal box 434 is illustrated in greater detail in Fig. 4Q.
[0284] Fig. 40 illustrates non-terminal box 432 in greater detail. Entry-point 432a and end- point 432b of non-terminal box 432 are also illustrated in Fig. 40. Non-terminal box 435 is also illustrated in Fig. 40. Non-terminal box 435 is illustrated in greater detail in Fig. 4R.
[0285] Fig. 4P illustrates non-terminal box 433 in greater detail. Entry-point 433a and end- point 433b of non-terminal box 433 are also illustrated in Fig. 4P.
[0286] Fig. 4Q illustrates non-terminal box 434 in greater detail. Entry-point 434a and end- point 434b of non-terminal box 434 are also illustrated in Fig. 4Q.
[0287] Fig. 4R illustrates non-terminal box 435 in greater detail. Entry-point 435a and end- point 435b of non-terminal box 435 are also illustrated in Fig. 4R. A non-terminal box 430 is also illustrated in Fig. 4R. Non-terminal box 430 is illustrated in greater detail in Fig. 4M.
[0288] Fig. 4S illustrates all those source components that are categorized as
indeterminable source components 1481-24. Each of the indeterminable source components 148i-24 is desired to be represented by at least one component value 146, in a desired query, which: 1. either cannot be generated by utilizing an algorithm and/or a computer
implementable logic, or
2. is desired not to be generated by utilizing an algorithm and/or a computer
implementable logic in at least one desired query.
[0289] Fig. 4T illustrates all source components that are categorized as determinable source components 150i-i5- Each of the determinable source components 150i-is is represented by a component value 146 which can be generated by utilizing an algorithm and/or computer implementable logic. Following are the exemplary determinable source components:
1. SELECT 470a,
2. Whitespace 470b,
3. FROM 470c,
4. BY 470d,
5. opening parenthesis 470e,
6. closing parenthesis 470f,
7. comma 470g,
8. AND 470h,
9. period 470i,
10. AS 470j,
11 . srcAlaGrp 470k,
12. equal sign 470m,
13. srcAlaTbl 470n,
14. O 470p, and
15. srcAlal 470q.
[0290] Fig. 5A illustrates exemplary data tokens, wherein each of the data tokens is defined for utilization in conjunction with a component value 146, representing one or more of the indeterminable source components illustrated in Fig. 4S and/or determinable source components illustrated in Fig. 4T.
[0291] Data token qryGrp 512, which is an example of a data token 152, is represented by a token value 154 of a Boolean type, and can be represented by one of three possible token values: True, False and NULL A set of data token rules 158 for qryGrp 512 is specified as follows:
1 . If qryGrp 512 is represented by True, which is an example of a token value 154, then the desired query will be constructed as an aggregate query.
2. Otherwise, the desired query will be constructed as a non-aggregate query. [0292] qryGrp 512 can be associated with a component value 146 in a manner that queryBuilder can construct a desired query, either an aggregate query or a non-aggregate query, on the basis of a token value 154, which represents qryGrp 512. qryGrp 512 enables determination of a component value 146 for "GROUP 471 b", which is an indeterminable source component 148.
[0293] Data token qryUni 514, which is an example of a data token 152, is represented by a token value 154 of a Boolean type, and can be represented by one of three possible token values: True, False and NULL. A set of data token rules 158 for qryUni 514 is specified as follows:
1. If qryUni 514 comprises True, which is an example of a token value 154, 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.
[0294] qryUni 514 can be associated with a component value 146 in 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 value 154, which represents qryUni 514. qryUni 514 enables determination of a component value 146 for "UNION ALL 471c" which is an indeterminable source component 148.
[0295] Token value 154 of qryUni 514 could 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, qryUni 514 is utilized for catering only to the UNION ALL operator.
[0296] Data token srcUseCnd 516, which is an example of a data token 152, is represented by a token value 154 of a string type, which is either:
1. a NULL value, or
2. an empty string, or
3. a string value, or
4. a list of comma-separated string values comprising at least two string values.
[0297] A token value 154, representing srcUseCnd 516, can be associated with a component value 146, which represents "table-name 472k", which is an example of indeterminable source component 148, and be processed in conjunction with a parameter value 162 of a parameter prmUseCnd 622, which is an example of a parameter 160. The result of the processed token value 154, which is an example of a token result 156,
representing srcUseCnd 516, is utilized to determine whether the component value 146, representing table-name 472k, is desired to be utilized for constructing a desired query or not. The token value 154, representing srcUseCnd 516, can be processed at the time of:
1. resolving a component value 146, which represents table-name 472k, and/or
2. constructing a desired query.
[0298] srcUseCnd 516 is processed on the basis of the following set of data token rules 158:
1. A component value 146, representing table-name 472k, is utilized if either:
a. a token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, is either an empty string or a NULL value, or
b. a token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, comprises at least one string value which is also comprised by the parameter value 162 of prmUseCnd 622. For example, if a token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, is "abc.xyz", and the parameter value 162 of prmUseCnd 622 is "nop.xyz", then since the string value "xyz" is comprised by both the token value 154, representing srcUseCnd 516, and the parameter value 162 of prmUseCnd 622, therefore the component value 146, representing table-name 472k, will be utilized for constructing the desired query. As another example, if a token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, is "abc", and the parameter value 162 of prmUseCnd 622 is "abc.xyz", then since the string value "abc" is comprised by both the token value 154, representing srcUseCnd 516, and the parameter value 162 bf prmUseCnd 622, therefore the component value 146,
representing table-name 472k, 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 value 146, representing table-name 472k, is not utilized for
constructing a desired query if, either:
a. the parameter value 162 of prmUseCnd 622 is an empty string or a NULL value, but the token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, comprises at least one string value, or
b. the token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, comprises no string value that is comprised by the parameter value 162 of prmUseCnd 622. For example, if the token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, is "abc.xyz", and the parameter value 162 of prmUseCnd 622 is "nop.rst", then since neither the string value "abc" nor the string value "xyz" is comprised by the parameter value 162 of prmUseCnd 622, therefore the component value 146, representing table-name 472k, 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.
[0299] For the implementation of srcUseCnd 516, it is mandatory that either:
1. the token value 154, which represents srcUseCnd 516, and which is also associated to the component value 146, representing table-name 472k, must also be associated to all component values that are either utilized with the component value 146, representing table-name 472k, or are directly dependent on the component value 146, representing table-name 472k, or
2. the component values, which are either utilized with the component value 146, representing table-name 472k, or are directly dependent on the component value 146, representing table-name 472k, should be structured in a manner that, if the component value 146, representing table-name 472k, is not utilized for constructing a desired query, then the component values, which are either utilized with the component value 146, representing table-name 472k, or are directly dependent on the component value 146, representing table-name 472k, should also not be utilized for constructing a desired query.
[0300] Data token colUseCnd 518, which is an example of a data token 152, is represented by a token value 154 of a string type, which is either:
1. a NULL value, or
2. an empty string, or
3. a string value or
4. a list of comma-separated string values comprising at least two string values. [0301] A token value 154, representing colUseCnd 518, can be associated with a desired component value 1 6, which represents fldAla 472c, which is an example of an
indeterminable source component 148, and is processed in conjunction with the parameter value 162 of a parameter prmUseCnd 622, which is an example of parameter 160. The result of the processed token value 154, which is an example of a token result 156,
representing colUseCnd 518, is utilized to determine whether the component value 146, representing fldAla 472c, is desired to be utilized for constructing the desired query. The token value 154, representing colUseCnd 518, can be processed at the time of:
1. resolving a component value 146, which represents fldAla 472c, and/or
2. constructing the desired query.
[0302] colUseCnd 518 is processed on the basis of the following set of data token rules 158:
1. A component value 146, representing fldAla 472c, is utilized if either:
a. a token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, is either an empty string or a NULL value, or
b. a token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, comprises at least one string value that is also comprised by the parameter value 162 of prmUseCnd 622. For example, if a token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, is "abc.xyz", and the parameter value 162 of prmUseCnd 622 is "nop.xyz", then since the string value "xyz" is comprised by both the token value 154, representing colUseCnd 518, and the parameter value 162 of prmUseCnd 622, therefore the component value 146,
representing fldAla 472c, will be utilized for constructing a desired query. As another example, if a token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, is "abc", and the parameter value 162 of prmUseCnd 622 is "abc.xyz", then since the string value "abc" is comprised by both the token value 154, representing colUseCnd 518, and the parameter value 162 of prmUseCnd 622, therefore the component value 146, representing fldAla 472c, 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 value 146, representing fldAla 472c, is not utilized for constructing a desired query if, either:
a. a parameter value 162 of prmUseCnd 622 is an empty string or a NULL value, but the token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, comprises at least one string value, or
b. the token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, comprises no string value that is comprised by the parameter value 162 of prmUseCnd 622. For example, if the token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing the fldAla 472c, is "abc.xyz", and the parameter value 162 of prmUseCnd 622 is "nop.rst", then since neither the string value "abc" nor the string value "xyz" is comprised by the parameter value 162 of prmUseCnd 622, therefore the component value 146, representing fldAla 472c, 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.
[0303] For the implementation of colUseCnd 518, it is mandatory that either:
1. the token value 154, which represents colUseCnd 518, and which is also associated to the component value 146, representing fldAla 472c, must also be associated to all component values that are either utilized with the component value 146, representing fldAla 472c, or are directly dependent on the component value 146, representing fldAla 472c, or
2. the component values, which are either utilized with the component value 146, representing fldAla 472c or are directly dependent on the component value 146, representing fldAla 472c, be structured in a manner that, if the component value 146, representing fldAla 472c, is not utilized for constructing the desired query, then the component values, which are either utilized with the component value 146, representing fldAla 472c, or are directly dependent on the component value 146, representing fldAla 472c, should also not be utilized for constructing the desired query.
[0304] Data token colReuse 520, which is an example of a data token 152, is represented by a token value 154 of a Boolean type and can comprise one of three possible token values: True, False and NULL. colReuse 520 is utilized in conjunction with a token value 154, which represents another data token tknMonth 524. colReuse 520 is to be associated with a component value 146 that represents fldAla 472c. colReuse 520 enables queryBuilder to identify a component value 146 that represents fldAla 472c, and it is desired to generate component values 146„ on the basis of token result 156 of tknMonth 524 and which is also associated with the component value which represents fldAla 472c, wherein the token result 156 of tknMonth 524 is obtained by processing the token value 154, which represents tknMonth 524.
[0305] For implementing colReuse 520, it is mandatory that the component values, which are utilized with a component value 146, which represents fldAla 472c, or which are directly dependent on the a component value 146 which represents fldAla 472c, are to be structured in a manner that all component values, which are either utilized with the component value 146, which represents fldAla 472c, or which are directly dependent on component value 146, which represents fldAla 472c, can be generated together with the component value 146, which represents fldAla 472c.
[0306] Data token tknAlias 522, which is an example of a data token 152, is represented by a token value "!", an exclamation sign without quotes, as specified by a set of data token rules 158 for tknAlias 522. The set of data token rules 158 for tknAlias 522 also specifies that tknAlias 522 is implicitly associated with the source component table-name 472k in such a manner that for each such new component value 146, which represents table-name 472k, tknAlias 522 is utilized for generating a new and a unique table/view alias comprising one or more alphabets. Since the association of tknAlias 522 is implicit, "I" (exclamation sign without quotes) is never utilized with any component value 146 that represents table-name 472k.
[0307] tknAlias 522 enables determination of a component value 46 for srcAla 472e, which is an indeterminable source component 148.
[0308] tknAlias 522 can also be associated with a component value 146 that represents fldNamCol 472b and/or fldXpr 472d, wherein the association with the component value 146 which represents fldNamCol 472b and/or fldXpr 472d is achieved by embedding "I"
(exclamation sign without quotes) in a component value 146 which represents fldNamCol 472b and/or fldXpr 472d. On processing, "!" (exclamation sign without quotes) will be replaced by a table/view alias, followed by a period, which was generated for a component value 146 which represents fldNamCol 472b and/or fldXpr 472d and is a source table/view of the component value 146 which represents fldNamCol 472b and/or fldXpr 472d, in accordance with the predetermined rules illustrated in Figs. 4B to 4R. For example, if for tbIA, a component value 146 representing table-name 472k, which is a table/view alias, and which is generated as a result of processing a token value 154, which represents tknAlias . 522, is "b" (lowercase b without quotes), then the following are a few examples which illustrate component values which are related to the component value tbIA and represent fIdNamCol 472b and/or fldXpr 472d, 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), and
4. a component value "fld_09" will be "fld_09" after processing of "I" (exclamation sign without quotes) because "!" (exclamation sign without quotes) is not embedded in component value "fld_09".
[0309] Data token tknMonth 524, which is an example of a data token 152, is utilized for creating one or more component values that represent fIdNamCol 472b, fldAla 472c, and/or fldXpr 472d. tknMonth 524 is processed on the basis of a token value 154, which represents col Reuse 520, and a parameter value 162 of a parameter prmMthCnt 614, which is an example of a parameter 160. According to a set of data token rules 158 for the tknMonth 524, tknMonth 524 can be utilized in one of the following two formats:
1. %TknMth%, which can be embedded in a component value 146 representing
fIdNamCol 472b, fldAla 472c, and/or fldXpr 472d, and
2. %TknMth,argComp,argTrue,argFalse%, wherein tknMonth 524 is utilized with three arguments: argComp, argTrue and argFalse. This format of tknMonth 524 can only be embedded in component values that represent fIdNamCol 472b and/or fldXpr 472d. In this format, all three arguments, argComp, argTrue, and argFalse, 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, tknMonth 524 is utilized for determining the component values of the following indeterminable source components:
a. IIF 471f,
b. DECODE 471 n,
c. fldNamCnd 472g,
d. value 472h, e. true-result 472i, and
f. false-result 472j.
[0310] The processing of tknMonth 524 is done on the basis of a token value 154, which represents colReuse 520, and the parameter value 162 of prmMthCnt 614, which is an example of a parameter 160.
[0311] An exemplary set of data token rules 158 for colReuse 520 specifies that if a token value which represents colReuse 520 is a NULL value or False, or the parameter value 162 of prmMthCnt 614 is either zero or not defined, then tknMonth 524 is processed on the basis of the following part of the set of data token rules 158 for tknMonth 524:
1. If tknMonth 524 is embedded as %TknMth%, which is an example of a token value
154, then %TknMth% will be replaced with an empty string wherever it is embedded.
2. If tknMonth 524 is embedded as %TknMth,colCmpare,colTrue,colFalse%, which is an example of a token value 154, then %TknMth,colCmpare,colTrue,colFalse% will be replaced with colTrue wherever tknMonth 524 is embedded.
[0312] The set of data token rules 158 for colReuse 520 also specifies that if the token value 154, which represents colReuse 520, is True, and the parameter value 162 of prmMthCnt 614 is a positive integer, then the token value 154, which represents tknMonth 524, is processed in a manner that the component value 146 representing fldAla 472c along with all component values, which are either related to the component value 146 representing fldAla 472c or which are dependent on the component value 146 representing fldAla 472c, are utilized for constructing a desired query as many number of times as specified by the parameter value 162 of prmMthCnt 614. For processing tknMonth 524, the parameter value 162 of prmBegMth 616, which is an example of a parameter 160, is also utilized. The component value 146 which represents fldAla 472c along with all component values 146n, which are either related to the component value 146 representing fldAla 472c, or which are dependent on the component value 146 representing fldAla 472c, 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 value 162 of prmMthCnt 614. tknMonth 524 is processed on the basis of the following parts of the set of data token rules 158 for tknMonth 524:
1. If tknMonth 524 is utilized as %TknMth%, which is an example of a token value 154, then each iteration of %TknMth%, which results from the processing of the component value representing fldAla 472c, along with all component values that are either related to the component value representing fldAla 472c or are dependent on the component value representing fldAla 472c, is replaced by the first three letters of the name of the next month, starting from the month represented by the parameter value 162 of prmBegMth 616, and always continuing from Jan (for January) after Dec (for December) is reached. Here are two examples:
a. If the parameter value 162 of prmMthCnt 614 is 4, and the parameter value 162 of prmBegMth 616 is 3 (which represents the starting month of March), then the component value which represents fldAla 472c, along with all component values that are either related to the component value representing fldAla 472c, or are dependent on the component value representing fldAla 472c, will be utilized in the desired query 4 times, and %TknMth% will be replaced in all component values by:
Mar, on the first utilization of the component values, Apr, on the second utilization of the component values,
May, on the third utilization of the component values, and Jun, on the fourth utilization of the component values.
b. If the parameter value 162 of prmMthCnt 614 is 5, and the parameter value 162 of prmBegMth 616 is 11 (which represents the starting month of November), then the component value which represents fldAla 472c, along with all component values which are either related to the component value representing fldAla 472c or are dependent on the component value representing fldAla 472c, will be utilized in the desired query 5 times, and %TknMth% will be replaced in all component values by:
Nov, on the first utilization of the component values, Dec, on the second utilization of the component values,
Jan, on the third utilization of the component values, Feb, on the fourth utilization of the component values, and Mar, on the fifth utilization of the component values.knMonth 524 is utilized as %TknMth,argComp,argTrue,argFalse%, which is an example of a token value 154, then each iteration of
%TknMth,argComp,argTrue,argFalse%, which results from the processing of the component value representing fldAla 472c, along with all component values, which are either related to the component value representing fldAla 472c, or which are dependent on the component value representing fldAla 472c, is replaced by either an IIF 471f function or a DECODE 471 n function depending on the database for which the desired query is being constructed. In the IIF 471 f and the DECODE 471 n functions, argComp is compared with a value that is equal to the parameter value 162 of prmBegMth 616 at the first iteration, and the value will be increased by 1 for every next iteration, of the component values representing fldAla 472c, along with all component values, which are either related to the component value representing fldAla 472c or are dependent on the component value representing fldAla 472c. The value will start at 1 whenever the value goes beyond 12. Here are two examples:
a. If the parameter value 162 of prmMthCnt 614 is 4, the parameter value 162 of prmBegMth 616 is 3, and tkn Month 524 is 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) 11 F(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 value 162 of prmMthCnt 614 is 5, the parameter value 162 of prmBegMth 616 is 11 , and tknMonth 524 is 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)
For ORACLE:
1 ) DECODE(colCompare,11 ,colTrue,col False)
2) DECODE(colCompare,12,colTrue,colFalse)
3) DECODE(colCompare,1 ,colTrue,colFalse)
4) DECODE(colCompare,2,colTrue,colFalse)
5) DECODE(colCompare,3,colTrue,colFalse) [0313] Data token tknCurlyBrackets 526, which is an example of a data token 152, can be embedded in the component value 146 of the indeterminable source component whrXpr 472a. Data token tknCurlyBrackets 526 is represented by curly brackets, which are always utilized in a pair; an opening curly bracket, which is an example of a token value 154 of tknCurlyBrackets 526, "{" (without quotes) and a closing curly bracket, which is an example of a token value 154 of tknCurlyBrackets 526, "}" (without quotes). The opening curly bracket is always on the left side of the closing curly bracket. The curly brackets may be nested.
[0314] Figs. 5B and 5C illustrate an exemplary flowchart which explains an exemplary set of data token rules 158, specifying an exemplary processing logic, for tknCurlyBrackets 526. However, the exemplary flowchart does not provide any means for error checking and/or incorrect utilization of tknCurlyBrackets 526; throughout this exemplary flowchart, it is assumed that tknCurlyBrackets 526 is utilized appropriately.
[0315] The processing logic for tknCurlyBrackets 526 starts at operation 550a.
[0316] At operation 550b, whrXpr 472a, represented as "a target string" in the flowchart, is assigned to a variable EmbStr. In this example, tknCurlyBrackets 526 can only be utilized in a component value representing whrXpr 472a. However, tknCurlyBrackets 526 can be utilized in any other component value of a string type, if required and/or desired.
[0317] At operation 550c, the position of the last occurrence of "{" (without quotes) from the left side of EmbStr is stored in a variable Pos1.
[0318] At operation 550d, 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 operation 550e. Otherwise, the flow continues to operation 550f. 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 value 154 representing tknCurlyBrackets 526 is not utilized in whrXpr 472a.
2. The processing of tknCurlyBrackets 526 is complete.
[0319] At operation 550e, EmbStr is returned and processing of tknCurlyBrackets 526 is complete.
[0320] At operation 550f, the first occurrence of "}" (without quotes) from the left side, after Pos1 , is located and assigned to a variable Pos2. [0321] At operation 550g, the string between Pos1 and Pos2 (characters at Pos1 and Pos2 are not included) is assigned to a variable DtaTkn.
[0322] At operation 550h, 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.
[0323] At operation 550i, a variable Pos3 is assigned a value of (Pos2 + 1 ).
[0324] At operation 550j, 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 operation 550k. Otherwise, the flow continues to operation 550I.
[0325] At operation 550k, a variable Pos4 is assigned the position of the last occurrence of "{" (without quotes) just before Pos1 from the left side in EmbStr.
[0326] At operation 550I, it is checked whether TknResult carries a NULL value or not. If TknResult carries a NULL value, then the flow continues to operation 550m. Otherwise, the flow continues to 550n.
[0327] At operation 550m, TknResult is assigned a value: "1 = 1 " (without quotes).
[0328] At operation 550n, the string starting from Pos1 and ending at Pos2 (both Pos1 and Pos2 included) in EmbStr is replaced with the value carried by TknResult.
[0329] At operation 550o, it is checked whether TknResult carries a NULL value or not. If TknResult carries a NULL value, then the flow continues to operation 550 p. Otherwise, the flow continues to 550q.
[0330] At operation 550p, TknResult is assigned a value: "1 = 1 " (without quotes).
[0331] At operation 550r, 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.
[0332] At operation 550q, the character at Pos3 is replaced with a space character.
[0333] At operation 550s, the character at Pos4 is replaced with a space character. [0334] At operation 550t, the string starting from Pos1 and ending at Pos2 (both Pos1 and Pos2 included) in EmbStr is replaced with the value carried by TknResult.
[0335] Data token tknltemCodeBegin 528 is processed in conjunction with the parameter value 162 of a parameter prmltmBeg 624. An exemplary set of data token rules for tknltemCodeBegin 528 specifies that tknltemCodeBegin 528 is represented by "itmBeg" (without quotes) and can only be embedded in a component value representing whrXpr 472a. When processed, "itmBeg" (without quotes) is replaced by the parameter value 162 of prmltmBeg 624.
[0336] A data token tknItemCodeEnd 530 is processed in conjunction with the parameter value 162 of a parameter prmltmEnd 626. An exemplary set of data token rules for tknItemCodeEnd 530 specifies that tknItemCodeEnd 530 is represented by "itmEnd" (without quotes) and can only be embedded in a component value representing whrXpr 472a. When processed, "itmEnd" (without quotes) is replaced by the parameter value 162 of prmltmEnd 626.
[0337] Fig. 6 illustrates 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. 6 illustrates the following exemplary parameters:
1. Parameter prmQryld 612, which is an example of a parameter 160, is of a string type.
The parameter value 162 of prmQryld 612 is utilized to identify a source object, which is desired to be utilized for constructing a desired query.
2. Parameter prmMthCnt 614, which is an example of a parameter 160, is of a number type. The parameter value 162 of prmMthCnt 614 specifies the number of months which is utilized for processing a token value which represents tknMonth 524. The parameter value 162 of prmMthCnt 614 can be an integer ranging from 0 and 12, both inclusive.
3. Parameter prmBegMth 616, which is an example of a parameter 160, is of a number type. The parameter value 162 of prmBegMth 616 is utilized for specifying the starting month which is utilized for processing a token value which represents tknMonth 524. The parameters of prmBegMth 616 can be an integer ranging from 1 and 12, both inclusive.
4. Parameter prmOraQry 618, which is an example of a parameter 160, is of a Boolean type. The parameter value 162 of prmOraQry 618 is utilized for determining the database for which a desired query is to be constructed. If the parameter value 162 of prmOraQry 618 is True, then the desired query is constructed for ORACLE. Otherwise, the desired query is constructed for MICROSOFT ACCESS.
5. Parameter prmLftJoi 620, which is an example of a parameter 160, is of a Boolean type. The parameter value 162 of prmLftJoi 620 is utilized for determining the type of a JOIN which is to be used in a desired query. If the parameter value 162 of prmLftJoi 620 is 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 value 162 of the prmLftJoi 620 is utilized for determining a component value 146 of the following indeterminable source components:
a. INNER 471 h,
b. LEFT 471 i,
c. Plus sign 471 m
6. Parameter prmUseCnd 622, which is an example of a parameter 160, is of a string type. The parameter value 162 of prmUseCnd 622 is utilized for processing a token value, which represents srcUseCnd 516 and/or colUseCnd 518.
7. Parameter prmltmBeg 624, which is an example of a parameter 160, is of a string type. The parameter value 162 of prmltmBeg 624 is utilized for processing "itmBeg" (without quotes), which is the token value which represents
tknltemCodeBegin 528.
8. Parameter prmltmEnd 626, which is an example of a parameter 160, is of a string type. The parameter value 162 of prmltmEnd 626 is utilized for processing "itmEnd" (without quotes), which is the token value which represents
tknltemCodeEnd 530.
[0338] Fig. 7A illustrates a few exemplary attributes (which may also be called columns or fields), for an exemplary data model 164 illustrated in Fig. 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 the FIG. 4S, whose component values are not determinable either by utilizing a parameter 160, and/or by utilizing a data token 152, according to an aspect of an embodiment of the invention.
[0339] Attributes, illustrated in Fig. 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 in Fig. 7A: 1. Attribute qryWhr 752 is utilized for storing and determining a component value 146 of the following indeterminable source components:
a. WHERE 471a, and
b. whrXpr 472a
2. Attribute srcld 754 is utilized for storing and determining a component value 146 of the following indeterminable source components:
a. table-name 472k, and
b. JOIN 471j.
3. Attribute srcJoinFId 756 is utilized for storing and determining a component value 146 of fldAlal 472m, which is an example of an indeterminable source component 148.
4. Attribute srcJoinToFId 758 is utilized for storing and determining a component value
146 of fldAla2 472p, which is an example of an indeterminable source component 148.
5. Attribute srcJoinToSrc 760 is utilized for storing and determining a component value
146 of srcAla2 472n, which is an example of an indeterminable source component 148.
6. Attribute colAla 762 is utilized for storing and determining a component value 146 of fldAla 472c, which is an example of an indeterminable source component 148.
7. Attribute colXpr 764 is utilized for storing and determining a component value 146 of the following indeterminable source components:
a. fldNamCol 472b, and
b. fldXpr 472d
8. Attribute colGrpFun 766 is utilized for storing and determining a component value
146 of the following indeterminable source components:
a. fldAlaGrp 471e,
b. SUM 471 g, and
c. fldXpr 472d
[0340] Fig. 7B illustrates a data model, which is an example of a data model 164, which is utilized for creating an exemplary source object repository 168, wherein the exemplary source object repository 168 is 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 repository 168, which is created on the basis of the exemplary data model 164, 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 model 164 is created in a manner that it is sufficient for creating an exemplary source object repository 168 which 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 in Fig. 4S,
4. maintaining a desired order among one or more component values belonging to srcld
754.
5. maintaining a desired order among one or more component values belonging to colAla 762.
6. associating all token values of the data tokens illustrated in Fig. 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 in Fig. 7A, and
7. utilizing a source object and/or a desired part thereof in another source object.
[0341] The exemplary data model 164 comprises the following three entities:
1. Query 702.
2. Query Source 704.
3. Query Field 706.
[0342] Query 702 is 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. Query 702 comprises the following attributes:
1. qryld 732,
2. qryWhr 752,
3. qryGrp 512, and
4. qryUni 514.
[0343] qryld 732 is an exemplary attribute which is utilized in query 702 for the identification of a specific source object, qryld 732 acts as a primary key, and is utilized for uniquely identifying each source object. In query 702, qryld 732 is implemented as a string, and may comprise any valid component value of a string type. Since qryld 732 is utilized only for identifying and referencing a source object, there are no specific rules for a component which may be stored in qryld 732. However, in this example, the component value stored in qryld 732 must be unique for each source object, and may comprise only printable characters, qryld 732 is 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.
[0344] qryWhr 752 is utilized for storing a WHERE clause expression in this exemplary data model. qryWhr 752 is 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 tknCurly Brackets 526, tknltemCodeBegin 528, and/or tknltemCodeEnd 530. A component stored in qryWhr 752 is a string, which:
1. is optionally embedded in one or more of the following:
a. a token value representing tknCurlyBrackets 526,
b. a token value representing tknltemCodeBegin 528,
c. a token value representing tknltemCodeEnd 530, and
d. any combinations thereof, and
2. 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 tknCurlyBrackets 526, tknltemCodeBegin 528, and/or tknltemCodeEnd 530, and which are embedded in the component values that are stored in qryWhr 752, are processed.
[0345] qryGrp 512 is embedded in query 702, so as to enable queryBuilder to determine whether a desired query is an aggregate query or not.
[0346] qryUni 514 is embedded in query 702, so as to enable queryBuilder to determine whether a desired query is a UNION ALL query or not.
[0347] Query source 704 is a child entity of query 702, wherein query 702 has a one-to- many relationship 712 with query source 704. Query 702 also has another one-to-many relationship 714 with query source 704. The one-to-many relationship 714 is optional. Query 702 comprises following attributes:
1. srcQryld 734,
2. srcOrd 736,
3. srcld 754,
4. srcReuseld 738,
5. srcUseCnd 516,
6. srcJoinFId 756, 7. srcJoinToFId 758, and
8. srcJoinToSrc 760.
[0348] srcQryld 734 is an exemplary attribute which is utilized in query source 704 for enabling a one-to-many relationship 712. srcQryld 734 is a foreign key which is related to qryld 732 of query 702. In query source 704, srcQryld 734 is implemented as a string data type, and is of the same size as of qryld 732. srcQryld 734 and srcld 754 serve as a composite primary key in query source 704.
[0349] srcOrd 736 is an exemplary attribute which is utilized in query source 704 for maintaining a desired order among a plurality of component values that are stored in srcld 754. In query source 704, srcOrd 736 is implemented as a long integer data type; however, srcOrd 736 can be implemented as any other data type which is sufficient for maintaining an order among a plurality of component values that are stored in srcld 754. Such data types may include, but are not limited to, a short integer, a string, and a floating point.
[0350] srcld 754 is 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 srcld 754 must be unique within one source object because srcld 754 is a part of the composite primary key of query source 704. src!d 754 may be represented by either: . a component value which represents a table/view name which exists in a database which is intended to execute a desired query, or
2. an arbitrary view name (which must comprise all printable characters in this
example), only if a data value represents srcReuseld 738.
[0351] srcReuseld 738 is an exemplary attribute which is utilized in query source 704 to enable a utilization of another source object in query source 704. srcReuseld 738 is a foreign key and may optionally comprise a value from qryld 732. For this example, srcReuseld 738 cannot comprise a data value which represents its parent qryld 732, because such a data value will cause an infinite recursive loop in this exemplary data model. The one-to-many relationship 714 is implemented by utilizing qryld 732 and srcReuseld 738.
[0352] srcUseCnd 516 is embedded in query source 704. If the processing of the token value comprised by srcUseCnd 516 determines that srcld 754 cannot be utilized for constructing a desired query, then the complete record, comprising the token value of srcUseCnd 516 and the data value of srcld 754, including all child records, will not be utilized for constructing a desired query. [0353] srcJoinFId 756, srcJoinToFId 758, and srcJoinToSrc 760 are utilized to specify information which is required to join two tables, two views or one table and one view.
srcJoinFId 756 is utilized to specify a field alias which belongs to a table/view specified by srcld 754 of the current record. srcJoinToFId 758 is utilized to specify a field alias which belongs to the other table/view which is to be joined with table/view specified by srcld 754 of the current record, and is specified by the component value representing srcJoinToSrc 760. In this exemplary embodiment, self joins are not implemented.
[0354] Query field 706 is a child entity of query source 704, wherein query source 704 has a one-to-many relationship 716 with query field 706. Query field 706 comprises the following attributes:
1. colQryld 740,
2. colSrcld 742,
3. colOrd 744,
4. colAla 762,
5. colXpr 764,
6. colUseCnd 518,
7. colGrpFun 766, and
8. colReuse 520.
[0355] colQryld 740 and colSrcId 742 are two exemplary attributes which are utilized in query field 706 for enabling the one-to-many relationship 716. colQryld 740 and colSrcId 742 are foreign keys which are related to srcQryld 734 and srcld 754 respectively. colQryld 740 and colSrcId 742 are implemented by utilizing a string data type and are of the same size as srcQryld 734 and srcld 754 respectively. colQryld 740, colSrcId 742, and colAla 762 serve as a composite primary key in query field 706.
[0356] colOrd 744 is an exemplary attribute which is utilized in query field 706 for maintaining a desired order among a plurality of those component values that are stored in colAla 762. In query field 706, colOrd 744 is implemented as a long integer data type;
however, colOrd 744 could 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 colAla 762. Such data types may include, but are not limited to, a short integer, a string, and a floating point.
[0357] colAla 762 is utilized to specify a valid column/field alias for a desired query. colAla 762 is implemented as a string data type in this exemplary data model. A component value, which is stored in colAla 762, may also be embedded with %TknMth% which is a token value representing tknMonth 524. The component values stored in colAla 762 must be unique within one source object with reference to their parent component value, which is stored in srcld 754, because colAla 762 is a part of the composite primary key of query source 704.
[0358] colXpr 764 is utilized to specify a valid expression for a desired query. colXpr 764 is implemented as a string data type in this exemplary data model. A component value, which Is stored in colAla 762, may also be embedded with:
1. one or more token values representing tknMonth 524, and/or
2. one or more "!" (exclamation mark without quotes) representing tknAlias 522.
[0359] colUseCnd 518 is embedded in query field 706. If the processing of the token value comprised by colUseCnd 518 determines that colAla 762 cannot be utilized for constructing the desired query, the entire record, comprising the token value of colUseCnd 518 and component values of colAla 762, will not be utilized for constructing a desired query.
[0360] colGrpFun 766 is 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 colGrpFun 766 is represented by "SUM" (without quotes), then the SUM function is applied to the component value stored in colXpr 764. Otherwise, if colGrpFun 766 is represented by "Group" (without quotes), then colAla 762 is utilized in a GROUP BY clause, otherwise the component value stored in colXpr 764 is 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, colGrpFun 766 can be utilized for implementing any other function, such as, AVG, MAX, MIN, and the like.
[0361] colReuse 520 is embedded in query field 706, and is utilized to specify those records of query field 706 which are desired to be replicated.
[0362] Fig. 7C illustrates an exemplary implementation of the exemplary data model 164, illustrated in Fig. 7B, as an exemplary source object repository 168. Query 702 is implemented as a tbIQry 782, which is a MICROSOFT ACCESS database table. Query source 704 is implemented as a tbIQrySrc 784, which is a MICROSOFT ACCESS database table. Query field 706 is implemented as a tbIQryFId 786, which is a MICROSOFT ACCESS database table.
[0363] Figs. 8A to 8P illustrate an exemplary flowchart of an exemplary software component constructor 170 which is implemented as a function and is called queryBuilder. queryBuilder is utilized for constructing a desired query by utilizing a source object 166, which is stored in tbIQry 782, tbIQrySrc 784, and tbIQryFId 786, which are the data tokens illustrated in Fig. 5A, and the parameters illustrated in Fig. 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.
[0364] In the exemplary flowchart, the UNION ALL operator is implemented for sub queries only.
[0365] 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.
[0366] In the exemplary flowchart, it is implied that whenever tknMonth 524 is replaced in an operation, the complete representation of tknMonth 524, 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 tknMonth 524 is embedded in one database field.
[0367] In the exemplary flowchart, a variable is considered empty if the variable:
1. is empty, or
2. comprises a NULL value, or
3. comprises an empty value according to its data type, for example, an empty string, a zero, and a False.
[0368] 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 in Fig. 6, are defined at a global level, and are not initialized on any recursive call. [0369] 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.
[0370] 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.
[0371] The exemplary flowchart is self-explanatory. However, for clarity, some operations have been described in greater detail.
[0372] In the exemplary flowchart illustrated in Figs. 8A to 8X, the field names of tbIQry 782, tbIQrySrc 784, and tbIQryFId 786 are utilized without their respective numerals. The field names of the aforementioned tables, which represent attributes of the exemplary data model, are listed below:
1. qryld 732,
2. qryWhr 752,
3. qryGrp 512,
4. qryUni 514,
5. srcQryld 734,
6. srcOrd 736,
7. srcld 754,
8. srcReuseld 738,
9. srcUseCnd 516,
10. srcJoinFId 756,
1 . srcJoinToFId 758,
12. srcJoinToSrc 760,
13. colQryld 740,
14. colSrcld 742,
15. colOrd 744,
16. C0lAla 762,
17. colXpr 764,
18. colUseCnd 518,
19. colGrpFun 766, and
20. colReuse 520. [0373] 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 in Fig. 8A to 8X:
1. prmQryld 612,
2. prmMthCnt 614,
3. prmOraQry 618,
4. prmLftJoi 620,
5. tblQry 782,
6. tbIQrySrc 784,
7. tbIQryFId 786,
8. tknMonth 524,
9. prmBegMth 616, and
10. prmUseCnd 622,
[0374] In Fig. 8A, at terminal 810a, the function queryBuilder starts. queryBuilder receives a parameter for prmQryld 612, which is utilized to identify a desired source object from tbIQry 782.
[0375] At decision box 810b, 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 operation 810c and operation 81 Od respectively. If this is the first call to queryBuilder, then the flow continues to operation 810c. Otherwise, the flow continues to operation 810e.
[0376] At operation 81 Oe, 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.
[0377] At operation 810f, 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.
[0378] At operation 810g, 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. [0379] At operation 810h, an array variable varTblAry is initialized. varTblAry is a two dimensional array that is utilized for storing component values in srcld 754 along with a table/view alias, which is generated, as a result of processing tknAlias 522, for srcld 754.
[0380] In Fig. 8B, operations 811 p and 811q are called only once for a query; these operations are not called for sub-queries.
[0381] At operation 811 p, varAlaCnt is initialized to zero. varAlaCnt is utilized for calculating an alias for tknAlias 522.
[0382] At operation 811q, all parameters illustrated in Fig. 6 are resolved. The parameters may either be resolved by a direct input of a user, or be retrieved from a computer readable recording medium.
[0383] In Fig. 8C, at operation 812b, the object varQryRcd is opened, wherein the object varQryRcd comprises all fields of tbIQry 782, wherein the data value of qryld 732 is equal to the parameter value 162 of prmQryld 612. Since qryld 732 is the primary key, the object varQryRcd will comprise maximum one record.
[0384] At operation 812c, the object varSrcRcd is opened, wherein the object varSrcRcd comprises all fields of tbIQrySrc 784, wherein the data value of srcQryld 734 is equal to the data value of qryld 732, and the order of the Recordset comprised by the object varSrcRcd is on the data values of srcOrd 736.
[0385] At operation 812f, the varSrcAvl is assigned a result of the processed token value of srcUseCnd 516. The processing of the token value of srcUseCnd 516 is done in an exemplary function called CheckAvailability, which is illustrated in detail in Fig. 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.
[0386] At operation 8121, tknAlias 522 is processed. tknAlias 522 is processed by an exemplary function NewAlias(), which is illustrated in detail in Fig. 8R. The alias generated by a function NewAlias() is then stored in a variable varCurAla.
[0387] In Fig. 8D, at operation 813c, queryBuilder is called recursively for constructing a sub-query, wherein the sub-query is identified by a data value of srcReuseld 738. The resultant sub-query is stored in a variable varSubQry. [0388] At operation 813i, the object varFldRcd is opened, wherein the object varFId Red comprises all fields of tbIQryFId 786, wherein the data value of colQryld 740 is equal to the data value of srcQryld 734, the data value of colSrcId 742 is equal to the data value of srcld 754, and the order of the Recordset represented by the object varFldRcd is on the data values of colOrd 744.
[0389] At operation 813m, varFldAvl is assigned a result, which is an example of token result 156, of the processed token value of coiUseCnd 518. The processing of the token value of coiUseCnd 518 is done in the exemplary function CheckAvailability, which is illustrated in detail in Fig. 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.
[0390] Fig. 8Q illustrates an exemplary flowchart of an exemplary processing of two data tokens, srcUseCnd 516 and coiUseCnd 518, wherein the processing of srcUseCnd 516 and coiUseCnd 518 is implemented by utilizing the exemplary function CheckAvailability. Since the processing logic of both data tokens, srcUseCnd 516 and coiUseCnd 518, is the same, the processing of both data tokens is implemented as one function.
[0391] At operation 826a, the function CheckAvailability starts and receives a parameter prmCndTkn which comprises a parameter which will be either a token value representing srcUseCnd 516, or a token value representing coiUseCnd 518, depending on the location from where the function CheckAvailability is called.
[0392] At operation 826d, the parameter value 162 of prmUseCnd 622, 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 prmUseCnd 622 as an array in varCndPrm:
1. If prmUseCnd 622 is empty, then varCndPrm will comprise no array item.
2. If prmUseCnd 622 comprises only one string value, then varCndPrm will comprise one array item.
3. If prmUseCnd 622 comprises 10 comma-separated string values, then varCndPrm will comprise 10 array items, wherein each array item will comprise a string value.
[0393] Fig. 8R illustrates an exemplary flowchart of an exemplary processing of the function NewAlias(), which is utilized for an exemplary processing of tknAlias 522. Each time the function NewAliasQ is called, it returns a new alias comprising one or more alphabets. [0394] At operation 827a, the function NewAlias() starts.
[0395] At operation 827e, MOD represents modulo operation, which finds the remainder of a division of the value of a variable varWrkCnt by 26.
[0396] At operation 827f, INT represents an integer function, which returns only the integer part of a number without rounding the number.
[0397] At operation 827i, CHR represents a function, which returns an ASCII character which is represented by the number that is passed to CHR as a parameter.
[0398] At operation 827k, the function NewAlias() returns the newly calculated alias.
[0399] Fig. 8S illustrates 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 tknCurlyBrackets 526, tknltemCodeBegin 528, and tknItemCodeEnd 530.
[0400] At operation 828a, 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.
[0401] At operation 828d, the function WhereToken is utilized for processing
tknCurlyBrackets 526, tknltemCodeBegin 528, and tknItemCodeEnd 530.
[0402] Figs. 8T to 8X illustrate an exemplary flowchart of an exemplary implementation of a processing of tknCurlyBrackets 526, tknltemCodeBegin 528, and tknItemCodeEnd 530 on -the-basis of the processing rules.-illustrated in Figs. 5B and 5G, and the processing rules specified for tknltemCodeBegin 528 and tknItemCodeEnd 530.
[0403] In Fig. 8T, at operation 829a, the function WhereToken starts and receives a parameter prmRawWhr comprises a WHERE clause which may contain one or more token values representing tknCurlyBrackets 526, tknltemCodeBegin 528, and/or tknItemCodeEnd 530.
[0404] In Fig. 8U, at operation 830d, varResult is replaced by either:
1. the parameter value 162 of prmltmBeg 624, if a variable varTknDta contains "itmBeg" (without quotes), which represents tknltemCodeBegin 528, or 2. the parameter value 162 of prmltmEnd 626, if the variable varTknDta contains
"itmEnd" (without quotes), which represents tknltemCodeEnd 530, or
3. a NULL value, if the variable varTknDta contains neither "itmBeg" (without quotes), which represents tknltemCodeBegin 528, nor "itmEnd" (without quotes), which represents tknltemCodeEnd 530.
[0405] Figs. 9A to 90 illustrate exemplary source objects, which are stored in the source object repositories tbIQry 782, tbIQrySrc 784, and tbIQryFId 786, which are to be utilized by queryBuilder for constructing a desired query.
[0406] Fig. 9A illustrates a specific exemplary segment from tbIQry 782 (represented as 782a because it illustrates a specific exemplary segment of tbIQry 782), which shows an exemplary source object that is identifiable by qryA (a data value representing qryld 732), hereinafter called exemplary source object qryA, and which is represented in a record 901. 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 prmOraQry 618 and prmLftJoi 620 can change the resultant constructed query because these parameters are utilized during a construction of the desired query without utilizing any data token.
[0407] An exemplary segment of tbIQrySrc 784 (represented as 784a because it illustrates a specific exemplary segment of tbIQrySrc 784) comprises three records which are related to record 901. Each record in 784a illustrates 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. 784a illustrates:
1. A record 901a comprising tblltems.
2. A record 901b comprising tbIBrands, wherein tbIBrands will be JOINED with tblltems in the desired query constructed by utilizing the exemplary source object qryA by utilizing a column brandCode.
3. A record 901c comprising tbIOrigins, wherein tbIOrigins will be JOINED with tblltems in the desired query constructed by utilizing the exemplary source object qryA by utilizing a column originCode.
[0408] Fig. 9B illustrates exemplary records from tbIQryFId 786 (represented as 786b because it illustrates a specific exemplary segment of tbIQryFId 786) which are related to the record 901a, wherein the record 901a is illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784b because it illustrates a specific exemplary segment of tbIQrySrc 784). The records illustrated in 786b comprise columns of tblltems, which is comprised by record 901a, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object qryA.
[0409] Fig. 9C illustrates exemplary records from tbIQryFId 786 (represented as 786c because it illustrates a specific exemplary segment of tbIQryFId 786), which are related to record 901 b, wherein record 901b is illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784c because it illustrates a specific exemplary segment of tbIQrySrc 784). The record illustrated in 786c comprises a column of tbIBrands, which is comprised by record 901 b, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object qryA.
[0410] Fig. 9D illustrates exemplary records from tbIQryFId 786 (represented as 786d because it illustrates a specific exemplary segment of tbIQryFId 786) which are related to record 901c, wherein record 901c is illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784d because it illustrates a specific exemplary segment of tbIQrySrc 784). The record illustrated in 786d comprises a column of tbIOrigins, which is comprised by record 901c, which will be included in a desired query which queryBuilder constructs by utilizing the exemplary source object qryA.
[0411] Fig. 9E illustrates an exemplary segment of tbIQry 782 (represented as 782e because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object which is identifiable by qryPur (a data value which represents qryld 732), hereinafter called exemplary source object qryPur, and is represented in record 902. The exemplary source object qryPur is utilized in another source object, which is identifiable by qryUnion (a data value which represents qryld 732), hereinafter called the exemplary source object qryUnion, illustrated in Fig. 9G. However, queryBuilder can construct a desired query by utilizing only the exemplary source object qryPur.
[0412] An exemplary segment of tbIQrySrc 784 (represented as 784e because it illustrates a specific exemplary segment of tbIQrySrc 784) comprises one record 902a which is related to record 902. Record 902a illustrates 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.
[0413] In record 902a, srcUseCnd 516 is represented by an exemplary token value comprising a list of comma separated string comprising two string values: TknPur and TknZon. Utilization of srcUseCnd 516 implies that during the construction of a desired query which utilizes the exemplary source object qryPur, record 902a will be utilized only if the parameter value 162 of prmUseCnd 622 comprises at least one of the string values: TknPur and TknZon. In a case where record 902a is not utilized, the records illustrated in an exemplary segment of tbIQryFId 786 (represented as 786e because it illustrates a specific exemplary segment of tbIQryFId 786) will also not be utilized.
[0414] Record 902b will be utilized only if record 902a is utilized. Record 902c will be utilized only if srcUseCnd 516 comprises a string value TknZon. Record 902d will be utilized only if srcUseCnd 516 comprises a string value TknPur. Record 902e will be utilized only if srcUseCnd 516 comprises a string value TknSal. The string value TknSal is not included in record 902a because record 902a and its related records 902b, 902c, 902d, and 902e are not desired to be utilized for constructing a desired query if the parameter value 162 of srcUseCnd 516 comprises string value TknSal, but does not comprise any of the string values: TknPur and TknZon.
[0415] In records 902d and 902e, %TknMth%, which is a token value representing tknMonth 524, is embedded in the component value representing colAla 762.
[0416] In record 902d, colXpr 764 comprises an exemplary token value 154
%TknMth,lpurchaseMonth,!Amount,0% which represents tknMonth 524, wherein the token value representing tknMonth 524 also comprises two instances of "!" (sign of exclamation without quotes), which is a token value 154 representing tknAlias 522. This exemplary implementation illustrates a nesting of a token value representing tknAlias 522 in another token value representing tknMonth 524. The arguments purchaseMonth and Amount, which are utilized in colXpr 764 of record 902d, are column names of tbIPurchases, and 0 is a constant value.
[0417] In records 902d and 902e, colReuse 520 is represented by an exemplary data value True. This implies that records 902d and 902e will be utilized for constructing a desired query if utilized on the basis of colUseCnd 518, as many times as specified by the parameter value 162 of prmMthCnt 614. In a case where the parameter value 162 of prmMthCnt 614 is zero, records 902d and 902e will be utilized only once.
[0418] Fig. 9F illustrates an exemplary segment of tbIQry 782 (represented as 782f because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object which is identifiable by qrySal (a data value which represents qryld 732), hereinafter called the exemplary source object qrySal, and represented in record 903. The exemplary source object qrySal is utilized in another source object, identifiable by the exemplary source object qryUnion, which is illustrated in Fig. 9G. However, queryBuilder can construct a desired query by utilizing only the exemplary source object qrySal.
[0419] An exemplary segment of tbIQrySrc 784 (represented as 784f because it illustrates a specific exemplary segment of tbIQrySrc 784) comprises one record 903a which is related to record 903. Record 903a illustrates 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.
[0420] In record 903a, srcUseCnd 516 is represented by an exemplary token value comprising a list of comma separated string comprising two string values; TknSal and TknZon. The utilization of srcUseCnd 516 implies that during the construction of a desired query which utilizes the exemplary source object qrySal, record 903a will be utilized only if the parameter value 162 of prmUseCnd 622 comprises at least one of the string values: TknSal and TknZon. In a case where record 903a is not utilized, the records illustrated in an exemplary segment of tbIQryFId 786 (represented as 786f because it illustrates a specific exemplary segment of tbIQryFId 786) will also not be utilized.
[0421] Record 903b will be utilized only if record 903a is utilized. Record 903c will be utilized only if srcUseCnd 516 comprises a string value TknZon. Record 903d will be utilized only if srcUseCnd 516 comprises a string value TknSal. Record 903e will be utilized only if srcUseCnd 516 comprises a string value TknPur. The string value TknPur is not included in record 903a because record 903a, and its related records 903b, 903c, 903d, and 903e, are not desired to be utilized for constructing a desired query if the parameter value 162 of srcUseCnd 516 comprises a string value TknPur, but does not comprise any of the string values: TknSal and TknZon.
[0422] In records 903d and 903e, %TknMth%, which is a token value representing tknMonth 524, is embedded in the component value stored in colAla 762.
[0423] In record 903e, colXpr 764 comprises an exemplary token value
%TknMth,!saleMonth,!Amount,0% which represents tknMonth 524, wherein the token value representing tknMonth 524 also comprises two instances of "!" (sign of exclamation without quotes), which is a token value 154 representing tknAlias 522. This exemplary
implementation illustrates a nesting of a token value representing tknAlias 522 in another token value representing tknMonth 524. The arguments saleMonth and Amount, which are utilized in colXpr 764 of record 903d, are column names of tbISales, and 0 is a constant value.
[0424] In records 903d and 903e, colReuse 520 is represented by an exemplary data value True. This implies that records 903d and 903e will be utilized for constructing a desired query if utilized on the basis of colUseCnd 518, as many times as specified by the parameter value 162 of prmMthCnt 614. In a case where the parameter value 162 of prmMthCnt 614 is zero, records 903d and 903e will be utilized only once.
[0425] Fig. 9G illustrates an exemplary segment of tbIQry 782 (represented as 782g because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object identifiable by a data value qryUnion, which represents qryld 732, and is stored in record 904.
[0426] In record 904, qryUni 514 is 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. Record 904 has two related records illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784g because it illustrates a specific exemplary segment of tbIQrySrc 784). If both the exemplary records of 784g, record 904a and record 904b, 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.
[0427] In record 904a, srcReuseld 738 is represented by a data value qrySal, which specifies that the exemplary source object qrySal will be utilized, as a view, whenever the record 904a will be utilized for constructing a desired query. A data value, qrySale, which represents srcld 754 of record 904a, is an exemplary arbitrary name given to a desired query, which is constructed by utilizing the exemplary source object qrySal.
[0428] In record 904b, srcReuseld 738 is represented by a data value qryPur, which specifies that the exemplary source object qryPur will be utilized, as a view, whenever record 904b will be utilized for constructing a desired query. A data value qryPurchase, which represents srcld 754 of record 904b, is an exemplary arbitrary name given to a desired query, which is constructed by utilizing the exemplary source object qryPur.
[0429] Fig. 9H illustrates an exemplary segment of tbIQry 782 (represented as 782h because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object identifiable by a data value qryGroup, hereinafter called the exemplary source object qryGroup, which represents qryld 732, and is in record 905. [0430] In record 905, qryGrp 512 is 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. Record 905 has one related record illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784h because it illustrates a specific exemplary segment of tbIQrySrc 784), which is represented by record 905a.
[0431] Record 905a has four related records illustrated in an exemplary segment of tbIQryFId 786 (represented as 786h because it illustrates a specific exemplary segment of tbIQryFId 786). In records 905b and 905c, colGrpFun 766 is represented by a component value "Group" (without quotes), which implies that the columns mentioned by records 905b and 905c will be utilized in GROUP BY clause of a desired query, which is constructed by utilizing the exemplary source object qryGroup. In records 905d and 905e, colGrpFun 766 comprises an exemplary component value "SUM" (without quotes), which implies that SUM function will be applied on the columns mentioned by records 905d and 905e in a desired query which is constructed by utilizing the exemplary source object qryGroup.
[0432] Fig. 9I illustrates an exemplary segment of tbIQry 782 (represented as 782i because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object, identifiable by qryFinal (a data value representing qryld 732), hereinafter called the exemplary source object qryFinal, which is represented in record 906.
[0433] Record 906 has five related exemplary records illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784i because it illustrates a specific exemplary segment of tbIQrySrc 784), which are represented by records 906a, 906b, 906c, 906d, and 906e. The five exemplary records illustrated in 784i represent four tables and one view, which may be utilized in a desired query which is constructed by utilizing the exemplary source object qryFinal. In 784i, each of records 906a, 906b, 906c, and 906e comprises a definition of one table which may be utilized, on the basis of the token value representing. srcUseCnd 516 of each respective record and the parameter value 162 of prmUseCnd 622, in a query which is constructed by utilizing the exemplary source object qryFinal. Record 906d comprises a definition of a view, specified by "qryGroup" (without quotes), which is a data value representing srcReuseld 738, and which may be utilized, on the basis of the token value representing srcUseCnd 516 of its respective record and the parameter value 162 of prmUseCnd 622, in a desired query which is constructed by utilizing the exemplary source object qryFinal.
[0434] Fig. 9J illustrates records of tbIQryFId 786 (represented as 786j because it illustrates a specific exemplary segment of tbIQryFId 786) which are related to record 906a, which is illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784j because it illustrates a specific exemplary segment of tbIQrySrc 784). The records illustrated in 786j specify columns of tbl Items, which is comprised by record 906a, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
[0435] Fig. 9K illustrates a record of tbIQryFId 786 (represented as 786k because it illustrates a specific exemplary segment of tbIQryFId 786) which is related to record 906b, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784k because it illustrates a specific exemplary segment of tbIQrySrc 784). The record illustrated in 786k specifies a column of tbIBrands, which is comprised by record 906b, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
[0436] Fig. 9L illustrates a record of tbIQryFId 786 (represented as 7861 because it illustrates a specific exemplary segment of tbIQryFId 786) which is related to record 906c, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 7841 because it illustrates a specific exemplary segment of tbIQrySrc 784). The record illustrated in 7861 specifies a column of tbIOrigins, which is comprised by record 906c, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
[0437] Fig. 9M illustrates records of tbIQryFId 786 (represented as 786m because it illustrates a specific exemplary segment of tbIQryFId 786) which are related to record 906d, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784m because it illustrates a specific exemplary segment of tbIQrySrc 784). The records illustrated in 786m specify columns of qryGroupSrc, which is comprised by record 906d, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal.
[0438] Fig. 9N illustrates a record of tbIQryFId 786 (represented as 786n because it illustrates a specific exemplary segment of tbIQryFId 786) which is related to record 906e, illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784n because it illustrates a specific exemplary segment of tbIQrySrc 784). The record illustrated in 786n specifies a column of tbiZones, which is comprised by record 906e, which may be utilized for constructing a desired query which is to be constructed by queryBuilder by utilizing the exemplary source object qryFinal. [0439] Fig. 90 illustrates an exemplary segment of tbIQry 782 (represented as 782o because it illustrates a specific exemplary segment of tbIQry 782) which shows an exemplary source object, identifiable by qryModify (a data value representing qryld 732), hereinafter called the exemplary source object qryModify, which is represented in record 907.
[0440] In record 907, qryWhr 752 is represented by an exemplary WHERE clause expression, wherein the exemplary WHERE clause expression is embedded with token values representing tknCurlyBrackets 526, tknltemCodeBegin 528, and tknltemCodeEnd 530. Record 907 has one related exemplary record illustrated in an exemplary segment of tbIQrySrc 784 (represented as 784o because it illustrates a specific exemplary segment of tbIQrySrc 784), which is represented by record 907a.
[0441] Record 907a has ten related records, which are illustrated in an exemplary segment of tbIQryFId 786 (represented as 786o because it illustrates a specific exemplary segment of tbIQryFId 786). In records 907b and 907c, colUseCnd 518 is represented by an exemplary token value "Tknltm" (without quotes), which is utilized to enable the utilization of records 907b and 907c for constructing a desired query, which is constructed by utilizing the exemplary source object qryModify optionally on the basis of the parameter value 162 of prmUseCnd 622.
[0442] Figs. 10A to 10Z illustrate a few exemplary desired queries constructed by queryBuilder, which is illustrated in Figs. 8A to 8P, by utilizing one or more source objects, illustrated in Figs. 9A to 90. It is to be noted that only a few exemplary queries are illustrated in Figs. 10A to 1 OZ. Queries which can be constructed by utilizing different combinations of parameters, which are illustrated in Fig. 6, and source objects, which are illustrated in Figs. 9A to 90, 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.
[0443] Fig. 0A illustrates an exemplary desired query 1012a which is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified in Fig. 10A.
[0444] Fig. 10B illustrates an exemplary desired query 1012b which is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified in Fig. 10B. [0445] Fig. 10C illustrates an exemplary desired query 1012c which is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified in Fig. 10C.
[0446] Fig. 10D illustrates an exemplary desired query 1012d which is constructed by queryBuilder by utilizing the exemplary source object qryA and the parameters specified in Fig. 10D.
[0447] Fig. 10E illustrates an exemplary desired query 1012e which is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified in Fig. 10E.
[0448] Fig. 10F illustrates an exemplary desired query 1012f which is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified in Fig. 10F.
[0449] Fig. 10G illustrates an exemplary desired query 1012g which is constructed by queryBuilder by utilizing the exemplary source object qryPur and the parameters specified in Fig. 10G.
[0450] Fig. 10H illustrates an exemplary desired query 1012h which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10H.
[0451] Fig. 101 illustrates an exemplary desired query 1012i which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 101.
[0452] Fig. 10J illustrates an exemplary desired query 1012j which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10J.
[0453] Fig. 10K illustrates an exemplary desired query 1012k which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10K.
[0454] Fig. 10L illustrates an exemplary desired query 10121 which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10L. [0455] Fig. 10N illustrates an exemplary desired query 1012m which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10M.
[0456] Fig. 10P illustrates an exemplary desired query 1012o which is constructed by queryBuilder by utilizing the exemplary source object qryFinal and the parameters specified in Fig. 10O.
[0457] Fig. 10Q illustrates an exemplary desired query 1012q which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10Q.
[0458] Fig. 10R illustrates an exemplary desired query 1012r which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10R.
[0459] Fig. 10S illustrates an exemplary desired query 1012s which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10S.
[0460] Fig. 10T illustrates an exemplary desired query 1012t which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10T.
[0461] Fig. 10U illustrates an exemplary desired query 1012u which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10U.
[0462] Fig. 10V illustrates an exemplary desired query 1012v which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10V.
[0463] Fig. 10X illustrates an exemplary desired query 1012w which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10W.
[0464] Fig. 10Z illustrates an exemplary desired query 1012y which is constructed by queryBuilder by utilizing the exemplary source object qryModify and the parameters specified in Fig. 10Y. 2. Concluding remarks on embodiments and drawings
[0465] 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.
[0466] 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 environment 300 of Fig. 3.
[0467] 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.
[0468] 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.
[0469] 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
[0470] 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.
[0471] 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.
[0472] This invention will enable development of software which can easily develop software components on a user's demand, as and when required.
[0473] 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.
[0474] 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.
[0475] 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.
[0476] 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.
[0477] 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.
I. Hotel management software. m. Human resource management software.
n. Banking software.
o. Web based applications.
p. Manufacturing control systems.
q. Process control systems.
[0478] 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 for the query building engine can readily be utilized on other platforms.
[0479] 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.
[0480] 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.
[0481] 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.
[0482] This invention enables creation of software factories which work as real factories thus making software industrialization a reality.
[0483] 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.
[0484] 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.
[0485] 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.
[0486] 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.
[0487] 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. [0488] 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.
[0489] 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.
[0490] 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.
[0491] 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.

Claims

Claims: What is claimed is:
1. A method of constructing a software component, comprising: creating a data token along with a set of data token rules that specifies a manner in which a token value can be created, a manner in which the token value can be associated to a component value, and a manner in which the token value can be processed, wherein processing of the token value produces a token result utilizable for constructing the software component.
2. The method according to claim 1 , wherein the token value is processed by utilizing a parameter value.
3. The method according to claim 1 , wherein the token value is retrieved by
utilizing a parameter value.
4. The method according to claim 1 , wherein the token value is utilized without any processing, for constructing the software component.
5. The method according to claim 1 , wherein the processing of the token value comprises executing a set of instructions which are executable by a processor.
6. The method according to claim 1 , wherein the component value is retrieved by utilizing a parameter value.
7. A method for creating a source object, wherein the source object comprises a component value, wherein the component value represents an indeterminable source component, and wherein the component value is utilized for constructing a software component; the method comprises creating the source object in a manner that a token value can be associated with the component value in a manner that the token value can be utilized for determining a manner in which the component value is utilized for constructing the software component.
8. The method according to claim 7, wherein the utilization of the token value determines that the component value is not to be utilized for constructing the software component.
9. The method according to claim 7, wherein the utilization of the token. value determines that the component value is to be processed, and then the processed component value is to be utilized for constructing the software component.
10. The method according to claim 7, wherein the utilization of the token value determines that the component value is to be modified, and then the modified component value is to be utilized for constructing the software component.
11. The method according to claim 7, wherein the utilization of the token value determines that the component value is to be changed, and then the changed component value is to be utilized for constructing the software component.
12. The method according to claim 7, wherein the utilization of the token value determines that the component value is to be utilized for creating another component value, and then the another component value is to be utilized for constructing the software component.
13. The method according to claim 7, wherein the token value is embedded in the source object.
14. The method, according to claim 7, wherein the token value is embedded in the component value.
15. The method, according to claim 7, wherein the source object comprises at least one component value, which is not comprised by the software component.
16. The method, according to claim 15, wherein the at least one component value, which is not comprised by the source object, is determined by utilizing the token value.
17. The method, according to claim 15, wherein the at least one component value, which is not comprised by the source object, is determined by utilizing a parameter value.
18. The method, according to claim 15, wherein the at least one component value, which is not comprised by the software object, is determined by a computer program that is utilized for constructing the software component.
19. The method according to claim 7, wherein a token result is obtained by
processing the token value, and then the token result is utilized for determining a manner in which the component value is utilized for constructing the software component.
20. The method according to claim 19, wherein the utilization of the token result determines that the component value is not to be utilized for constructing the software component.
21. The method according to claim 19, wherein the utilization of the token result determines that the component value is to be processed, and then the processed component value is to be utilized for constructing the software component.
22. The method according to claim 19, wherein the utilization of the token result determines that the component value is to be modified, and then the modified component value is to be utilized for constructing the software component.
23. The method according to claim 19, wherein the utilization of the token result determines that the component value is to be changed, and then the changed component value is to be utilized for constructing the software component.
24. The method according to claim 19, wherein the utilization of the token result determines that the component value is to be utilized for creating another component value, and then the another component value is to be utilized for constructing the software component.
25. The method according to claim 19, wherein the processing the token value is executing a set of instructions which are executable by a processor.
26. A method for creating a source component repository, wherein the source component repository is sufficient for storing a source object, wherein the source object comprises an indeterminable source component represented by a component value, wherein the indeterminable source component is to be utilized for constructing a software component; the method comprises creating a data structure in a manner that the component value is identifiable in the source component repository with reference to the source object and the indeterminable source component which is represented by the component value.
27. The method according to claim 26, wherein the source object comprises a token value, wherein the token value is associated with the component value.
28. The method according to claim 27, wherein the token value refers to a
component value which is stored in the source object.
29. The method according to claim 27, wherein the token value refers to a component value which is stored in another source object.
30. The method according to claim 26, wherein the source object comprises a plurality of component values in a desired order.
31. The method according to claim 26, wherein the source object is uniquely
identifiable.
32. The method according to claim 26, wherein the source object comprises a plurality of source components in a desired hierarchy.
33. A method for associating a token value with a component value, wherein the component value is utilized for constructing a software component; the method comprises associating a token value with a component value in a manner that a token result, obtained by processing the token value, can be utilized in relation to the component value for constructing the software component.
34. The method according to claim 33, wherein the token value is embedded in the component value.
35. The method according to claim 33, wherein the token value is implicitly
associated with the component value.
36. The method according to claim 33, wherein the token value is virtually
associated with the component value.
37. The method according to claim 33, wherein the token value is utilized, without being processed, in relation to the component value for constructing the software component.
38. The method according to claim 33, wherein the token value is processed by utilizing a parameter value.
39. The method according to claim 33, wherein the token value is retrieved by utilizing a parameter value.
40. The method according to claim 33, wherein the processing of the token value comprises executing a set of instructions which are executable by a processor.
41. The method according to claim 33, wherein the component value is retrieved by utilizing a parameter value.
42. A method of generating a software source code based upon a set of predetermined rules of the software source code, wherein the set of predetermined rules comprises a source component which is represented by a component value, comprising: a. creating a source object repository, comprising: i. categorizing the source component into an indeterminable source component or a determinable source component, ii. defining a data token along with a set of data token rules, wherein the data token is represented by a token value, iii. defining a parameter, wherein the parameter is represented by a parameter value, iv. creating a data model on the basis of the set of predetermined rules and by utilizing the indeterminable source component and the data token, wherein the data model is sufficient for storing a source object, wherein the source object comprises the component value and the token value, and v. creating the source object repository on the basis of the data
model; b. creating a source code generator, wherein the source code generator is created based upon the source object repository, the set of predetermined rules, the parameter, and the data token; and c. creating the source object, wherein the source object comprises the
component value and the token value, wherein the token value is created and associated with the component value in accordance with the set of data token rules; d. executing the source code generator to generate a desired source code according to a user's input of the parameter value; wherein the source code generator utilizes the source object and the parameter value to generate the desired source code.
43. The method according to claim 42, wherein the data token is not utilized for creating the data model.
44. The method according to claim 42, wherein the parameter is utilized for creating the data model.
45. The method according to claim 42, wherein a token result is obtained by
processing the token value and the token result is utilized for generating the desired source code.
46. The method according to claim 42, wherein the token value is obtained by utilizing the parameter value.
47. The method according to claim 42, wherein the component value is obtained by utilizing the parameter value.
48. The method according to claim 42, wherein the token value is associated with the component value.
49. The method according to claim 42, wherein the source object does not
comprise the token value.
50. The method according to claim 42, wherein the source object does not
comprise the component value.
51. The method according to claim 42, wherein the source code generator is
integrated with a computer program.
52. A computer readable recording medium that stores instructions for causing a computing device to generate a software component according to a user's input of a parameter value by: a. identifying a source object, b. -retrieving the source object from a source object repository, c. retrieving a component value of an indeterminable source component from the source object, d. processing a token value for obtaining a token result, and e. constructing the software component on the basis of a set of
predetermined rules of the software component and by utilizing the parameter value, the component value of the indeterminable source component, a component value of a determinable source component, and the token result.
53. The method according to claim 52, wherein the token value is not processed.
54. The method according to claim 52, wherein the token value is utilized for
constructing the software component.
55. The method according to claim 52, wherein the token result is not utilized for constructing the software component.
56. The method according to claim 52, wherein the parameter value is not utilized for constructing the software component.
57. The method according to claim 52, wherein the component value of the
indeterminable source component is not utilized for constructing the software component.
58. The method according to claim 52, wherein the component value of the
determinable source component is not utilized for constructing the software component.
59. The method according to claim 52, wherein the token value is processed by utilizing the parameter value.
60. One or more computer readable recording media storing computer executable instructions for controlling a computer to execute operations for performing the method detailed in claim 1.
61. A computer system comprising a client computer, a server computer in
communication with the client computer and comprising a computer processor and a computer readable recording memory coupled to the computer processor and comprising such computer processor executable instructions which, when executed, cause the computer processor to implement the method as detailed in claim 1.
62. An apparatus comprising a machine readable recording medium comprising instructions that, when executed by a machine, cause the machine to perform the method described in claim 1.
63. One or more computer readable recording media storing computer executable instructions for controlling a computer to execute operations for performing the method detailed in claim 7.
64. A computer system comprising a client computer, a server computer in communication with the client computer and comprising a computer processor and a computer readable recording memory coupled to the computer processor and comprising such computer processor executable instructions which, when executed, cause the computer processor to implement the method as detailed in claim 7.
65. An apparatus comprising a machine readable recording medium comprising instructions that, when executed by a machine, cause the machine to perform the method described in claim 7.
66. One or more computer readable recording media storing computer executable instructions for controlling a computer to execute operations for performing the method detailed in claim 26.
67. A computer system comprising a client computer, a server computer in
communication with the client computer and comprising a computer processor and a computer readable recording memory coupled to the computer processor and comprising such computer processor executable instructions which, when executed, cause the computer processor to implement the method as detailed in claim 26.
68. An apparatus comprising a machine readable recording medium comprising instructions that, when executed by a machine, cause the machine to perform the method described in claim 26.
69. One or more computer readable recording media storing computer executable instructions for controlling a computer to execute operations for performing the method detailed in claim 33.
70. A computer system comprising a client computer, a server computer in
communication with the client computer and comprising a computer processor and a computer readable recording memory coupled to the computer processor and comprising such computer processor executable instructions which, when executed, cause the computer processor to implement the method as detailed in claim 33.
71. An apparatus comprising a machine readable recording medium comprising instructions that, when executed by a machine, cause the machine to perform the method described in claim 33.
72. One or more computer readable recording media storing computer executable instructions for controlling a computer to execute operations for performing the method detailed in claim 42.
73. A computer system comprising a client computer, a server computer in
communication with the client computer and comprising a computer processor and a computer readable recording memory coupled to the computer processor and comprising such computer processor executable instructions which, when executed, cause the computer processor to implement the method as detailed in claim 42.
74. An apparatus comprising a machine readable recording medium comprising instructions that, when executed by a machine, cause the machine to perform the method described in claim 42.
PCT/IB2012/001736 2011-09-23 2012-09-10 A method and an apparatus for developing software WO2013041930A1 (en)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2014531324A JP5972381B2 (en) 2011-09-23 2012-09-10 Computer program, method, computer system, apparatus and computer for developing software
CA2849592A CA2849592A1 (en) 2011-09-23 2012-09-10 A method and an apparatus for developing software
CN201280057919.3A CN104169871B (en) 2011-09-23 2012-09-10 Software development methodology and device
EP12779156.4A EP2758873B1 (en) 2011-09-23 2012-09-10 A method and an apparatus for developing software

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/242,558 2011-09-23
US13/242,558 US8898628B2 (en) 2011-09-23 2011-09-23 Method and an apparatus for developing software

Publications (1)

Publication Number Publication Date
WO2013041930A1 true WO2013041930A1 (en) 2013-03-28

Family

ID=47089088

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/IB2012/001736 WO2013041930A1 (en) 2011-09-23 2012-09-10 A method and an apparatus for developing software

Country Status (6)

Country Link
US (1) US8898628B2 (en)
EP (1) EP2758873B1 (en)
JP (1) JP5972381B2 (en)
CN (1) CN104169871B (en)
CA (1) CA2849592A1 (en)
WO (1) WO2013041930A1 (en)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9256874B2 (en) 2011-04-15 2016-02-09 Shift4 Corporation Method and system for enabling merchants to share tokens
US8688589B2 (en) 2011-04-15 2014-04-01 Shift4 Corporation Method and system for utilizing authorization factor pools
US9818111B2 (en) * 2011-04-15 2017-11-14 Shift4 Corporation Merchant-based token sharing
US8914767B2 (en) * 2012-03-12 2014-12-16 Symantec Corporation Systems and methods for using quick response codes to activate software applications
US9182951B1 (en) * 2013-10-04 2015-11-10 Progress Software Corporation Multi-ecosystem application platform as a service (aPaaS)
US9785755B2 (en) 2014-05-21 2017-10-10 International Business Machines Corporation Predictive hypothesis exploration using planning
US9697467B2 (en) 2014-05-21 2017-07-04 International Business Machines Corporation Goal-driven composition with preferences method and system
CN105630470B (en) * 2014-10-31 2018-12-21 阿里巴巴集团控股有限公司 Code is built together method, system, oss server and open server
US9594913B2 (en) 2015-01-28 2017-03-14 Wal-Mart Stores, Inc. System, method, and non-transitory computer-readable storage media for analyzing software application modules and provide actionable intelligence on remediation efforts
CN108829024B (en) * 2018-05-30 2020-10-27 广州明珞软控信息技术有限公司 PLC program generation method and system
CN108962271B (en) * 2018-06-29 2021-06-22 广州视源电子科技股份有限公司 Multi-weighted finite state transducer merging method, device, equipment and storage medium
CN109857396B (en) * 2019-01-11 2023-11-17 平安科技(深圳)有限公司 Component construction method and device, storage medium and electronic equipment
CN110109658B (en) * 2019-04-17 2022-08-23 首都师范大学 ROS code generator based on formalized model and code generation method
CN111913426B (en) * 2019-05-08 2023-05-05 创升益世(东莞)智能自控有限公司 Software container method applied to industrial automation control system
CN110162477B (en) * 2019-05-28 2022-11-22 山东财经大学 Automatic abnormal debugging system and method for third-party library version upgrading
CA3147698A1 (en) * 2019-09-03 2021-03-11 Yudong CAO Computer architecture for executing quantum programs
CN110764753B (en) * 2019-09-18 2023-08-25 亚信创新技术(南京)有限公司 Business logic code generation method, device, equipment and storage medium
JP7313309B2 (en) * 2020-03-31 2023-07-24 株式会社日立製作所 Program execution support device and program execution support method
CN111474897B (en) * 2020-04-07 2021-07-06 中科新松有限公司 Robot programming method based on assembly and computer readable storage medium
CN117609102A (en) * 2024-01-23 2024-02-27 云筑信息科技(成都)有限公司 Building industry Internet counting platform system testing method

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070239762A1 (en) * 2006-03-30 2007-10-11 International Business Machines Corporation Automated interactive visual mapping utility and method for transformation and storage of XML data
US20090094577A1 (en) * 2007-10-09 2009-04-09 International Business Machines Corporation Generating data access operations based on a data model using a data services model

Family Cites Families (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4156910A (en) 1974-02-28 1979-05-29 Burroughs Corporation Nested data structures in a data driven digital data processor
US4156908A (en) 1974-02-28 1979-05-29 Burroughs Corporation Cursive mechanism in a data driven digital data processor
US4156909A (en) 1974-02-28 1979-05-29 Burroughs Corporation Structured data files in a data driven digital data processor
US4156903A (en) 1974-02-28 1979-05-29 Burroughs Corporation Data driven digital data processor
DE3134282A1 (en) 1981-08-29 1983-03-10 Olympia Werke Ag, 2940 Wilhelmshaven METHOD FOR PRESENTING IDEOGRAPHIC SIGNS AND COMPARABLE GRAPHICS
EP0168054B1 (en) 1984-07-11 1991-10-09 Hitachi, Ltd. Method and system for data driven information processing
JPS63181033A (en) 1987-01-23 1988-07-26 Hitachi Ltd Automatic program generating system
US5005119A (en) 1987-03-02 1991-04-02 General Electric Company User interactive control of computer programs and corresponding versions of input/output data flow
US5327569A (en) 1989-08-28 1994-07-05 Mitsubishi Denki Kabushiki Kaisha Data driven type processor including a generation management system
JPH04280320A (en) 1991-03-08 1992-10-06 Nec Corp Automatic generation device for program
US5485601A (en) 1992-05-14 1996-01-16 Ching; Hugh Completely automated and self-generating software system
US5649181A (en) 1993-04-16 1997-07-15 Sybase, Inc. Method and apparatus for indexing database columns with bit vectors
US5379432A (en) 1993-07-19 1995-01-03 Taligent, Inc. Object-oriented interface for a procedural operating system
US5768480A (en) 1994-10-21 1998-06-16 Lucent Technologies Inc. Integrating rules into object-oriented programming systems
US5778377A (en) 1994-11-04 1998-07-07 International Business Machines Corporation Table driven graphical user interface
US6138268A (en) 1995-10-30 2000-10-24 Information System Development Institute Software production method, processing apparatus and recording medium
US6003037A (en) 1995-11-14 1999-12-14 Progress Software Corporation Smart objects for development of object oriented software
US6035300A (en) 1995-12-15 2000-03-07 International Business Machines Corporation Method and apparatus for generating a user interface from the entity/attribute/relationship model of a database
US5764989A (en) 1996-02-29 1998-06-09 Supercede, Inc. Interactive software development system
US5819287A (en) 1996-07-30 1998-10-06 Nec Corporation Database driven automatic program production system
US5892902A (en) 1996-09-05 1999-04-06 Clark; Paul C. Intelligent token protected system with network authentication
US6513154B1 (en) 1996-10-21 2003-01-28 John R. Porterfield System and method for testing of computer programs in programming effort
US6070165A (en) 1997-12-24 2000-05-30 Whitmore; Thomas John Method for managing and accessing relational data in a relational cache
US6117188A (en) * 1998-04-27 2000-09-12 Cognet Corporation System and method using token processing to control software distribution and desktop management in a computer network environment
US6523172B1 (en) 1998-12-17 2003-02-18 Evolutionary Technologies International, Inc. Parser translator system and method
US7356482B2 (en) 1998-12-18 2008-04-08 Alternative Systems, Inc. Integrated change management unit
US6253366B1 (en) 1999-03-31 2001-06-26 Unisys Corp. Method and system for generating a compact document type definition for data interchange among software tools
US6381743B1 (en) 1999-03-31 2002-04-30 Unisys Corp. Method and system for generating a hierarchial document type definition for data interchange among software tools
US6289501B1 (en) 1999-03-31 2001-09-11 Unisys Corp. Method for generating simple document type definitions
US6634019B1 (en) 1999-07-16 2003-10-14 Lamarck, Inc. Toggling software characteristics in a fault tolerant and combinatorial software environment system, method and medium
US6550052B1 (en) 1999-11-09 2003-04-15 Daimlerchrysler Corporation Software development framework for constructing embedded vehicle controller software
SG102555A1 (en) 1999-11-25 2004-03-26 Kim Seng Holdings Pte Ltd Method for using a data flow net to specify and assemble computer software
US6973639B2 (en) 2000-01-25 2005-12-06 Fujitsu Limited Automatic program generation technology using data structure resolution unit
US20010052112A1 (en) * 2000-03-14 2001-12-13 Mohan Ram P. Method and apparatus for developing software
US6502102B1 (en) 2000-03-27 2002-12-31 Accenture Llp System, method and article of manufacture for a table-driven automated scripting architecture
US6681383B1 (en) 2000-04-04 2004-01-20 Sosy, Inc. Automatic software production system
US20020073141A1 (en) 2000-12-12 2002-06-13 Dewhurst Sebastian John Computational fluid dynamics software
WO2003065240A1 (en) 2002-02-01 2003-08-07 John Fairweather System and method for managing collections of data on a network
CA2371646A1 (en) * 2002-02-13 2003-08-13 Ibm Canada Limited-Ibm Canada Limitee Configuration model for configuring an adapter software component to selectively access software objects and object editor using instance of same
US7039898B2 (en) 2002-07-12 2006-05-02 Netspective Communications, Llc Computer system for performing reusable software application development from a set of declarative executable specifications
US7484219B2 (en) 2002-11-21 2009-01-27 Microsoft Corporation Synchronizing centralized data store from distributed independent data stores using fixed application programming interfaces
US20040100495A1 (en) 2002-11-21 2004-05-27 International Business Machines Corporation Apparatus, system and method of enabling a user to configure a desktop
US8019793B2 (en) * 2003-02-14 2011-09-13 Accenture Global Services Limited Methodology infrastructure and delivery vehicle
US7171656B2 (en) 2003-04-08 2007-01-30 The Boeing Company Generic embedded application technology architecture
US20050065970A1 (en) * 2003-08-20 2005-03-24 King Anthony Graham System, method and apparatus for developing software
US7533264B2 (en) * 2003-08-20 2009-05-12 Microsoft Corporation Custom security tokens
US7318216B2 (en) 2003-09-24 2008-01-08 Tablecode Software Corporation Software application development environment facilitating development of a software application
US7272615B2 (en) 2003-11-24 2007-09-18 International Business Machines Corporation Meta-data driven resource management
US7383531B2 (en) 2004-01-29 2008-06-03 Microsoft Corporation Extensible productivity tool for exposing common classes in application building
US7383272B2 (en) 2004-05-03 2008-06-03 Boardwalktech, Inc. Method and system for versioned sharing, consolidating and reporting information
US7512693B2 (en) * 2004-05-13 2009-03-31 International Business Machines Corporation Dual-component state token with state data direct access index for systems with high transaction volume and high number of unexpired tokens
EP1756706B1 (en) * 2004-05-20 2019-09-25 Code Valley Corp Pty Ltd Code generation techniques
US20060130038A1 (en) * 2004-12-15 2006-06-15 Claussen Christopher S Apparatus, system, and method for facilitating dynamic modification of existing software objects defined in a strongly-typed programming language
US7962497B2 (en) * 2005-02-18 2011-06-14 Microsoft Corporation Relationship modeling
JP4924976B2 (en) * 2005-03-23 2012-04-25 新日鉄ソリューションズ株式会社 Software development support system
US8132148B2 (en) * 2005-04-29 2012-03-06 Microsoft Corporation XML application framework
US7509654B2 (en) 2005-09-29 2009-03-24 Avaya Inc. Data-driven and plug-in defined event engine
US7958494B2 (en) 2007-04-13 2011-06-07 International Business Machines Corporation Rapid on-boarding of a software factory
US20100023924A1 (en) 2008-07-23 2010-01-28 Microsoft Corporation Non-constant data encoding for table-driven systems
JP2011053891A (en) * 2009-09-01 2011-03-17 Toshiba Corp Method and program for storing communication data in relational database

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070239762A1 (en) * 2006-03-30 2007-10-11 International Business Machines Corporation Automated interactive visual mapping utility and method for transformation and storage of XML data
US20090094577A1 (en) * 2007-10-09 2009-04-09 International Business Machines Corporation Generating data access operations based on a data model using a data services model

Also Published As

Publication number Publication date
JP5972381B2 (en) 2016-08-17
US20130080995A1 (en) 2013-03-28
CA2849592A1 (en) 2013-03-28
CN104169871A (en) 2014-11-26
EP2758873A1 (en) 2014-07-30
US8898628B2 (en) 2014-11-25
JP2015511032A (en) 2015-04-13
CN104169871B (en) 2016-06-22
EP2758873B1 (en) 2017-11-01

Similar Documents

Publication Publication Date Title
EP2758873B1 (en) A method and an apparatus for developing software
US7424485B2 (en) Method and apparatus for generating user interfaces based upon automation with full flexibility
US10558434B2 (en) Rule-based automatic class generation from a JSON message
US20180349134A1 (en) User interface that integrates plural client portals in plural user interface portions through sharing of one or more log records
US11392393B2 (en) Application runtime configuration using design time artifacts
US20080228521A1 (en) Support model integration system and method
US20130151453A1 (en) Real-time predictive intelligence platform
WO2003001322A2 (en) Hybrid use of rule and constraint engines
JP7389522B2 (en) Domain-specific language interpreter and interactive visual interface for fast screening
Geerts et al. Augmented intensional reasoning in knowledge‐based accounting systems
Oliveira et al. BPMN patterns for ETL conceptual modelling and validation
US20130326470A1 (en) Domain-specific generation of programming interfaces for business objects
US20210232379A1 (en) Systems and methods for scalable hierarchical polyhedral compilation
CN116048610A (en) Flow-driven conversation system implementation method and workflow engine-based conversation robot
WO2020146120A1 (en) System and method for generating in-memory tabular model databases
US7716653B2 (en) Configurable importers and resource writers for converting data into another format
US20230214193A1 (en) Systems and methods utilizing machine learning driven rules engine for dynamic data-driven enterprise application
US20140025439A1 (en) Regression free business process management
Buck Woody et al. Data Science with Microsoft SQL Server 2016
CN100545803C (en) Data bank access method and database server
CN110389955A (en) A kind of data warehouse scheduling file automatic creation system and generation method
US20230385036A1 (en) Mapping data models to facilitate code generation
KR20130027767A (en) Method and system for providing service for controlling program linked to database
Firestone Distributed Knowledge Management Systems (DKMS): The Next Wave in DSS
CN115964043A (en) Front-end page development method and device

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 12779156

Country of ref document: EP

Kind code of ref document: A1

REEP Request for entry into the european phase

Ref document number: 2012779156

Country of ref document: EP

ENP Entry into the national phase

Ref document number: 2849592

Country of ref document: CA

ENP Entry into the national phase

Ref document number: 2014531324

Country of ref document: JP

Kind code of ref document: A

NENP Non-entry into the national phase

Ref country code: DE