text:
|Publication number
|Publication type
|Application number
|Publication date
|Jan 23, 2007
|Filing date
|Nov 5, 2002
|Priority date
|May 20, 1999
|Fee status
|Also published as
|Publication number
|Markos Zaharioudakis, Mir Hamid Pirahesh, Roberta Jo Cochrane, George Lapis, Yang Sun
|Original Assignee
|International Business Machines Corporation
|Export Citation
|BiBTeX, EndNote, RefMan
|Patent Citations (49), Non-Patent Citations (20), Referenced by (14), Classifications (9), Legal Events (6)
|External Links: USPTO, USPTO Assignment, Espacenet
This application is a continuation-in-part under 35 U.S.C. �120 of and commonly-assigned U.S. Utility application Ser. No. 09/502,821, entitled "OPTIMIZING QUERIES USING AUTOMATIC SUMMARY TABLES," filed on Feb. 11, 2000, by Roberta J. Cochrane, George Lapis, Ting Y. Leung, Mark A. Paskin, Mir H. Pirahesh, Yang Sun, Monica S. Urata, and Markos Zaharioudakis, now U.S. Pat. No. 6,847,962, issued Jan. 25, 2005 which application claims the benefit under 35 U.S.C. �119(e) of and commonly-assigned U.S. Provisional application Ser. No. 60/135,133, entitled "OPTIMIZING QUERIES USING AUTOMATIC SUMMARY TABLES," filed on May 20, 1999, by Roberta J. Cochrane, George Lapis, Ting Y. Leung, Mark A. Paskin, Mir H. Pirahesh, Yang Sun, Monica S. Urata, and Markos Zaharioudakis, now abandoned, both of which applications are incorporated by reference herein.
1. Field of the Invention
This invention relates in general to database management systems performed by computers, and in particular, to the optimization of correlated queries using automatic summary tables (ASTs).
2. Description of Related Art
Computer systems incorporating Relational DataBase Management System (RDBMS) software using Structured Query Language (SQL) interface are well known in the art. The SQL interface has evolved into a standard language for RDBMS software and has been adopted as such by both the American Nationals Standard Institute (ANSI) and the International Standards Organization (ISO).
For most RDBMS software, combinations of tables and views are used to access data stored in tables in the database. Indices are often used to improve the performance of retrieving data from tables. However, indices are generally limited to columns from base tables. Thus, indices are not seen as suitable for:
A view definition includes a query that, if processed, provides a temporary result table based on the results of the query at that point in time. Using an INSERT statement and an appropriately defined table in the database, the temporary results table can be stored in the database. To refresh this table, the user would need to perform a DELETE from the table and then perform the INSERT again.
Users can directly query against the created table, provided that the users are aware how the results were derived. Generally, the RDBMS software is not aware that such a table is any different from any other table in the database. Moreover, this table cannot be used by an optimizer within the RDBMS software to improve performance, even though the table may contain data that would drastically improve the performance of other queries.
This leads to the notion of automatic summary tables (ASTs) or materialized views as envisioned by the present invention. These tables are similar to the created table described above, except that the definition of the table is based on a "full select" (much like a view) that is materialized in the table. The columns of the table are based on the elements of the select list of the full select.
In the present invention, with properly defined summary tables, the RDBMS software is now aware how the result in the AST was derived. When an arbitrarily complex query is submitted, an optimizer in the RDBMS software can now consider using the ASTs to answer the query, which is a technique that requires performing matching and compensation between the query and summary table definition.
There are extensive research activities and literature on this topic, as disclosed in the following publications, all of which are incorporated by reference herein:
1. L. S. Colby, R. L. Cole, E. Haslam, N. Jazaeri, G. Johnson, W J. McKenna, L. Schumacher, D. Wihite. Red Brick Vista: Aggregate Computation and Management. Proceedings of the 14th Int'l. Conference on Data Engineering, Orlando, Fla., 1998.
2. R. Bello, K. Dias, A. Downing, J. Feenan, J. Finnerty, W. Norcott, H. Sun, A. Witkowski, M. Ziauddin. Materialized Views In Oracle. Proceedings of the 24th VLDB Conference, New York, 1998.
3. D. Srivastava, S. Dar, H. Jagadish, A. Levy. Answering Queries with Aggregation Using Views. Proceedings of the 22nd VLDB Conference, Mumbai, India, 1996.
4. M. Zaharioudakis, R. Cochrane, G. Lapis, H. Pirahesh, M. Urata. Answering Complex SQL Queries Using Automatic summary Tables. Proceedings of the ACM-SIGMOD Conference, Dallas, Tex., 2000.
However, the current state of the art is that SQL statements with correlation can not be used in defining summary tables, and as a result, SQL queries with correlation can not be optimized using summary tables.
To overcome the limitations in the prior art described above, and to overcome other limitations that will become apparent upon reading and understanding the present specification, the present invention discloses a method, apparatus, and article of manufacture for optimizing database queries using an automatic summary table. A query is analyzed using matching and compensation tests between the query at least one correlated subquery within the query and the automatic summary table to determine whether expressions occurring in the query, but not in the automatic summary table, can be derived using the automatic summary table. If so, the query is rewritten so that the automatic summary table is used.
It is an object of the present invention to optimize correlated queries using automatic summary tables. More specifically, it is an object of the present invention to make the relational database management system aware how a result in an automatic summary table was derived, so that an optimizer function of the relational database management system can use the automatic summary table to respond to correlated queries. The techniques presented in the present invention involve complex and yet efficient matching and compensation tests among queries, and are directly applicable to other areas such as multiple query optimization.
Referring now to the drawings in which like reference numbers represent corresponding parts throughout:
In the following description of the preferred embodiment, reference is made to the accompanying drawings, which form a part hereof, and in which is shown by way of illustration a specific embodiment in which the invention may be practiced. It is to be understood that other embodiments may be utilized and structural and functional changes may be made without departing from the scope of the present invention.
1 Hardware Environment
An interface 106, such as TCP/IP, IMS/DB/DC, CICS, TSO, OS/2 or other similar interface, is used to connect a client computer 108 to the computer 100, in order that client computer 108 may transmit electrical signals to and from the computer system 100 that represent commands for performing various search and retrieval functions, termed queries, against the databases. In the present invention, these queries conform to the Structured Query Language (SQL) standard, and invoke functions performed by Relational DataBase Management System (RDBMS) software. In the preferred embodiment of the present invention, the RDBMS software comprises the DB2 product offered by I.B.M. Corporation for the MVS™, OS/2™, UNIX™, or WINDOWS NT™ operating systems. Those skilled in the art will recognize, however, that the present invention has application to any RDBMS software.
As illustrated in
At the heart of the RDBMS architecture is the Database Services module 114. The Database Services module 114 contains several submodules, including the Relational Database System (RDS) 116, the Data Manager 118, and the Buffer Manager 120, as well as other components, such as an SQL compiler/interpreter 122. These submodules support the functions of the SQL language, i.e., definition, access control, retrieval, and update of user and system data.
Generally, each of the components, modules, and submodules of the RDBMS software comprise instructions and/or data, and are embodied in or retrievable from a computer-readable device, e.g., a memory, a data storage device, a remote device coupled to the computer 100 by a data communications device, etc. Moreover, these instructions and/or data, when read, executed, and/or interpreted by the computer 100, cause the computer 100 to perform the steps necessary to implement and/or use the present invention.
Thus, the present invention may be implemented as a method, apparatus, or article of manufacture using standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof. The term "article of manufacture", or alternatively, "computer program carrier", as used herein is intended to encompass a computer program accessible from any computer-readable device, carrier, or media. Of course, those skilled in the art will recognize many modifications may be made to this configuration without departing from the scope of the present invention.
Those skilled in the art will recognize that any combination of the above components, or any number of different components, including computer programs, peripherals, and other devices, may be used to implement the present invention, so long as similar functions are performed thereby.
2 Interactive SQL Execution
3 Embedded/Batch SQL Execution
4 An Optimization Technique for Automatic Summary Tables
Automatic summary tables (ASTs) (also known as materialized views) are database tables that contain the pre-computed results of certain SQL queries. The purpose of the optimization technique presented here is to take advantage of existing ASTs by employing a matching algorithm that determines whether the content of an AST overlaps with the content of an SQL query, and compensates for the non overlapping parts. When such an overlap exists, we say that the query and the AST match. After discovering a match, the optimizer may choose to rewrite the query so that it will access the AST instead of one or more of the base tables. The optimizer will rewrite the query if the estimated cost of the rewritten query is less than the original query.
This is shown in
Block 400 represents the start of the logic.
Block 402 is a decision block that represents the computer system 100 determining whether there are one or more of the summary tables referencing one or more tables in the query. If so, control transfers to Block 404; otherwise, control transfers to Block 410.
Block 404 represents the computer system 100 analyzing the query using matching and compensation tests between the query, at least one correlated subquery within the query and the automatic summary table to determine whether expressions occurring in the query, but not in the automatic summary table, can be derived using the automatic summary table, wherein the correlated subquery comprises an inner query block of the query that references one or more columns that appear in an outer query block of the query.
In Block 404, the analyzing step comprises the step of determining whether there is a match between the query, the correlated subquery and the automatic summary table using a bottom-up traversal of boxes in query graph models (QGMs) for the query, correlated subquery and automatic summary table that tries to establish matches between query, correlated subquery and automatic summary table, until it reaches a top of the QGM for the automatic summary table. This determining step further comprises the steps of performing a navigator function to identify candidate subsumee and subsumer pairs from the QGMs for the query, correlated subquery and automatic summary table in an order such that the bottom-up traversal of the QGMs for the query, correlated subquery and automatic summary table is satisfied, and performing a match function that takes as input the candidate subsumee and subsumer pair from the QGMs for the query, correlated subquery and automatic summary table, and returns information on whether the subsumee matches with the subsumer. The navigator function guarantees that before an attempt is made to match a candidate subsumee and subsumer pair, all children of the pair have been matched with each other, and the sources of any correlated input columns that are referenced in the subsumee have also been matched with all of their candidate subsumers. The match function maps a reference by the correlated subquery to a column in the outer query block to an equivalent expression in the automatic summary table, using any one of the available matches of a source of the correlated column. The match function records which match was used, and at an appropriate later stage, detects whether the match used was a correct match, and if not, backtracks and tries another match. The match function performs regrouping when it pulls up a predicate with correlated and constant columns only though a GROUP-BY subsumer that does not have any grouping columns.
Block 406 is a decision block that represents the computer system 100 determining whether the query should be rewritten to take advantage of one or more of the summary tables. If so, control transfers to Block 408; otherwise, control transfers to Block 410.
Block 408 represents the computer system 100 rewriting the query so that the automatic summary table is used. Specifically, this Block compensates complex expressions using the summary table as they are identified in Block 404, wherein the expressions can be re-derived from one or more of the columns of the summary table.
Block 410 represents the end of the logic.
Additional details concerning the various steps and functions of
4.1 A Database Schema
The operation of the present invention can best be understood in context, i.e., using a real-world example, such as a data warehouse application performed by the RDBMS software. Consider a credit card company storing credit card customer information, their credit card accounts, and transactions that customers made using credit cards for purchases. A possible database schema, comprising a "star" schema, is illustrated by
The database schema described above will be used as the basis for most of the examples presented in the rest of this document. The following "CREATE TABLE" statements may be used to create the tables shown in
4.2 An Example of Query Optimization Based on Automatic Summary Tables
ASTs are created using the "CREATE SUMMARY TABLE" statement followed by a full-select statement. For example, the following statement creates an AST that stores the number of transactions per location and year.
Now, consider the following user query (Q1) that counts the number of transactions performed in USA per each state and year and returns the counts that are greater than 100.
Given AST1 and Q1, the matching algorithm will prove that AST1 and Q1 match, and will generate a new query (NewQ1) that is equivalent to Q1, but accesses AST1 instead of the TRANS table. This new query is as follows:
Given that a typical store performs several thousands of transactions per year, AST1 is several thousands times smaller than TRANS. Therefore, using AST1 instead of TRANS in NewQ1 can improve the response time of this query significantly.
4.3 The Query Graph Model
The present invention is based on an improved optimization technique that is typically performed at step 202 of
In QGM, a query is represented as a directed acyclic graph in which a node (or box) represents a table operation and an edge (or quantifier) represents a flow of records from a child (producer) box to a parent (consumer) box. The leaf boxes represent the base tables referenced by the query. Each non-leaf box produces a relational table after performing its operation on its input, which is a set of relational tables. A single root box produces the final result of the associated query. Non-leaf QGM boxes are labeled by the type of operation they perform. The two most common types are SELECT and GROUP-BY (other types include OUTER JOIN, UNION, etc.). SELECT boxes represent the select-project-join portions of queries; they apply the WHERE- or HAVING-clause predicates and compute all of the scalar (i.e., non-aggregate) expressions that appear in SELECT and GROUP-BY clauses. GROUP-BY boxes perform grouping and compute the aggregate functions.
As an example,
As indicated by
The shorthand QGM notation for input and output columns is QNCs and QCLs, respectively. It should be noted that a given QCL may be consumed by multiple parent boxes, and hence, there is a 1:N relationship between QCLs and QNCs. In other words, it can said that QNCs are the "carriers" of the data values that are produced by the QCLs. The precise relationships between boxes, quantifiers, QCLs and QNCs are as follows:
4.4 The Matching Algorithm for Non-Correlated Queries and ASTs
The present invention is based on a matching algorithm for non-correlated queries. This algorithm is described in the publication: M. Zaharioudakis, R. Cochrane, G. Lapis, H. Pirahesh, M. Urata, "Answering Complex SQL Queries Using Automatic Summary Tables," Proceedings of the ACM-SIGMOD Conference, Dallas, Tex., 2000, which is incorporated by reference herein. This section provides an overview of the main concepts of this matching algorithm.
The matching algorithm is based on the idea of matching pairs of QGM boxes. In general, a box E matches with another box R, if and only if a QGM graph G(E,R) can be constructed such that G(E,R) contains the subgraph G(R) rooted at R, and G(E,R) is semantically equivalent to the subgraph G(E) rooted at E, i.e., G(E,R) and G(E) always produce the same result. If box E matches with box R, then G(E,R)−G(R) is the compensation, that is, the set of boxes that describe the operations that have to be performed on the output of R in order to get the same output as E. A graphical representation of this definition is shown in
Having defined the match relationship, the matching algorithm is presented, starting with its two main components: a match function and navigator function, both of which are components of the optimizer function found in the RDBMS software. The match function takes as input two QGM boxes and determines whether they match. If a match is established, the match function also returns information that describes the compensation (as shown in
The match function is driven by the navigator function. The navigator function scans the query and AST graphs in a bottom-up fashion, identifying potential pairs of matching boxes (where the subsumee comes from the query graph and the subsumer comes from the AST graph), and invoking the match function on such pairs, until the root AST box is matched (if possible) with one or more query boxes. To perform its task, the navigator function first initializes a set of candidate subsumee/subsumer pairs by forming all of the pairs between the leaf nodes of the query and AST graphs. During each iteration, the navigator function removes a pair from this set and passes it to the match function. If a match is established, the navigator function forms all of the pairs between the parents of the subsumee and the subsumer. The order in which the candidate box pairs are processed is important. Specifically, the navigator function ensures that during each invocation of the match function, the children of the two input boxes have been matched already, i.e., the match function has been invoked on each pair-wise combination of the children. Furthermore, the match function knows the compensation for the matches between the child boxes, because the navigator function retains this information after each successful match. As a result, the match function does not have to look at the whole subgraphs of the given subsumee and subsumer boxes; it needs to concentrate on the current pattern only, i.e., the subsumee, the subsumer, and the child compensation boxes. This design point is crucial for modularity and extensibility.
4.4.1 An Example of Matching Non-Correlated Queries
The publication: M. Zaharioudakis, R. Cochrane, G. Lapis, H. Pirahesh, M. Urata, "Answering Complex SQL Queries Using Automatic Summary Tables," Proceedings of the ACM-SIGMOD Conference, Dallas, Tex., 2000, which is incorporated by reference herein, contains an extensive list of patterns that can be handled by the match function, and states the matching conditions and compensations that are applicable to each pattern. Instead of repeating this list here, a single example is presented that illustrates the main points of this previous work. This example is shown in
The result of this matching is a new query, newQ2, which is shown in
The new query newQ2 is equivalent to Q2, but accesses AST2 instead of TRANS. Intuitively, this match is possible because both the query and the AST perform grouping and aggregation along the same dimensions (time and location) of the same fact table (TRANS), and the AST groups at a finer granularity than the query. In other words, the store-level yearly counts of the AST are partial counts for the state-level yearly counts of the query, and as a result, the state-level counts can be derived by summing over the store-level counts. In the remainder of this section, the steps taken by the matching algorithm to derive this match are described.
Since boxes T-Q and T-A are matched, their parents, i.e., Sel-1Q and Sel-1A become eligible for matching. In this case, the pattern consists of Sel-1Q (the subsumee), Sel-1A (the subsumer), and one rejoin child (L-Q) (where a rejoin child is defined as a child of the subsumee that does not match with any of the children of the subsumer). The matching conditions for this pattern are as follows:
Condition (2) is trivially satisfied in the example, as the subsumer does not have any predicates. Condition (1) is satisfied, because the columns referenced in the subsumee's predicates (t.storeid, 1.id, and 1.country) are either rejoin columns (1.id and 1.country) or are preserved at the output of the subsumer (t.storeid), and as a result the predicates are derivable. By the same logic, condition (3) is also satisfied. As a result, a match between Sel-1Q and Sel-1A is established (match1). However, this match is not exact, because the subsumee's predicates do not appear in the subsumer and, as a result, they must be re-applied to the output of the subsumer. This leads to the compensation box Sel-1C1, which rejoins the subsumer with the LOC table and re-applies the 'country=USA' predicate.
Next, the two GROUP-BY boxes (GB-1Q and GB-1A) become eligible for matching. In this case, the pattern consists of two GROUP-BY boxes (GB-2Q as the subsumee and GB-2A as the subsumer), and a child compensation box that is a SELECT box with rejoin (Sel-1C1). The matching conditions and associated compensation for this pattern are as follows:
Condition (1) guarantees that each group formed by the subsumer is a subgroup for exactly one of the groups formed by the subsumee. That is, there is a N:1 relationship between the subsumer groups and the subsumee groups, and the subsumee groups can be derived by regrouping over the subgroups of the subsumer. Condition (2) makes sure that the aggregate functions computed by the subsumer can be used to derive the aggregate functions of the subsumee during the regrouping. Finally, condition (3) makes sure that the subsumer preserves at its output the necessary columns for pulling up the child compensation.
In the publication: M. Zaharioudakis, R. Cochrane, G. Lapis, H. Pirahesh, M. Urata, "Answering Complex SQL Queries Using Automatic Summary Tables," Proceedings of the ACM-SIGMOD Conference, Dallas, Tex., 2000, an explanation is provided why these matching conditions and associated compensation are correct. In summary, what must be proven is that it is correct to pullup the rejoin and the other extra query predicates above the partial grouping that is performed by the subsumer, and before the final (higher granularity) grouping of the subsumee.
In the example, condition (1) is satisfied, because the "year" grouping column in GB-2Q is a grouping column in GB-2A as well, and the "state" grouping column in GB-2Q is a rejoin column (i.e., it comes from the LOC table, which is a rejoin table). Condition (2) is also satisfied; in particular, the count(*) output column of GB-2Q is derived by summing over the count(*) output column of GB-2A. Finally, it is easy to see that condition (3) is also satisfied. As a result match2 is established. The compensation for this match includes a SELECT box (Sel-2C1, which is the pulled-up version of Sel-1C1), followed by a GROUP BY box (GB-2C2) that re-groups by the subsumee's grouping columns and derives the subsumee's count function.
According to the definition of the matching relationship, the establishment of match2 implies that GB-2Q is equivalent to GB-2C2 (the root box of the match2 compensation). As a result, GB-2Q and its subgraph can be replaced with GB-2C2 and its own subgraph. Furthermore, since GB-2A is the root of the AST2 graph, the AST2 graph can be collapsed into a single base-table box representing the stored content of AST2. This way, Q2 is rewritten into a new query (NewQ2) that accesses AST2 instead on TRANS, as shown in
4.4.2 Expression Translation
The example in the previous section indicates that a central issue in matching is how to compare expressions (predicates and output columns) in the query graph with expressions in the AST graph. Such comparisons are necessary to check whether two expressions match or one expression is derivable from one or more other expressions. However, it is not possible to directly compare a subsumee expression E_exp with a subsumer expression R_exp, because their input columns (QNCs) originate from completely different subgraphs, and as a result, they are not comparable. (Using their symbolic names to compare QNCs from different graphs does not work because the names assigned to derived QNCs, i.e., QNCs coming from non base-table boxes, are arbitrary.) The solution is to translate E_exp into an equivalent expression E_exp′ that is valid within the subsumer's context, i.e., uses subsumer QNCs. Then, E_exp′ is compared with R_exp by comparing their parse trees. Translation is done by translating each subsumee QNC that is referenced in E_exp into an equivalent subsumer QNC, or more generally, into an equivalent subsumer expression.
When the subsumee and subsumer children match exactly, translating E_exp to E_exp′ is easy. Specifically, for each QCL X produced by a non-rejoin subsumee child, there is an equivalent QCL Y produced by the subsumer's matching child. As a result, if XE is a subsumee QNC that consumes X and appears in E_exp, and the subsumer consumes Y (i.e., the subsumer has a QNC YR), then XE in E_exp can be replaced with its equivalent YR QNC. By replacing each non-rejoin QNC of E_exp with its equivalent subsumer QNC (if it exists), the E_exp′ expression is obtained. Notice that rejoin QNCs are never translatable because they come from subsumee children that do not have matching subsumer children. If E_exp contains any rejoin QNCs, then these are just copied over in E_exp′. As a result, a subsumee expression with rejoin QNCs will never be equivalent to any subsumer expression, but it may be derivable from the subsumer's columns and the rejoin QNCs.
Translating QNCs is more complicated when the children do not match exactly. This is best illustrated by an example. In particular, the example of
TABLE 1 Storeid/state Date Cnt Sample Trans Table 1/CA Jan. 03, 1990 (storeid, state and 1/CA Feb. 10, 1990 date columns) 1/CA Apr. 12, 1990 2/CA Oct. 20, 1990 AST Result 1 1990 3 Query Result CA 1990 4
It can be seen that the HAVING predicate causes the AST to lose information: the group (2, 1990), which is necessary to produce the correct query result, has been eliminated from the AST.
The present invention is able to detect this semantic inequivalence between the two HAVING predicates by appropriately translating the query predicate. The steps taken during this translation are shown in
To ease the presentation, each QNC name is annotated with the name of the box that contains the QNC. The translation begins by creating a copy of the whole expression (step 1). Then, each QNC is translated in turn. To translate a QNC, the system first finds the child box that produces the QNC and replaces the QNC with the associated QCL expression. In the example, cnt-3Q is produced by the count(*) expression in box GB-2Q (step 2). The next step is to replace the count(*) expression with its equivalent QCL expression at the top of the child compensation. Thus, count(*) is translated as sum(cnt-2C2) (step 3). Then, the system recursively translates each new QNC (except QNCs that are produced by rejoin children) until the system reaches the bottom of the child compensation. This way, sum(cnt-2C2) is translated as sum(cnt-2C1) (step 4), where cnt-2C1 is produced by the "cnt" QCL of the subsumer's child. The last step is to check whether the, subsumer also consumes this "cnt" QCL. It does, and hence, the system can replace cnt-2C1 with the equivalent cnt-3A subsumer QNC (step 5). The fully translated expression is sum(cnt-3A)>2, which is obviously not the same as the subsumer's expression cnt-3A>2. Notice that steps (2) and (3) in the above translation depend on the fact that each subsumee QNC comes from a child of the subsumee, and each subsumee child has at least one matching subsumer child, or is rejoin child.
The translation method described above is also the first step in deriving a subsumee expression E_exp from the subsumer's QCLs. After translating E_exp to E_exp′, derivabilty can be established by making sure that the subsumer computes at its output certain necessary subexpressions of E_exp′ (or even the entire E_exp′).
5 An Optimization Technique for Correlated Queries
5.1 The Query Graph Model for Queries with Correlation
Queries with correlation are multi-block queries where an inner query block (i.e., a subquery) references one or more columns that appear in outer query blocks. In QGM terms, this implies that at least one subquery box contains references to QNCs that do not come from the children of that box, but from other boxes in outer query blocks. An example is shown in
In the above SQL statements, the second select within the parentheses is a correlated subquery.
As shown in
5.2 The Matching Algorithm for Correlated Queries and ASTs
To allow the bottom-up matching algorithm to handle correlated subqueries, three extensions are required. These extensions are described below.
5.2.1 Extending the Bottom-Up Navigator Function
As explained in section 4.4.2 above, a crucial step in the matching algorithm is the translation of subsumee QNCs into equivalent subsumer expressions. Furthermore, it will be noted that this translation depends on the fact that each subsumee QNC comes from a child of the subsumee, and each subsumee child has at least one matching subsumer child, or is a rejoin child. In other words, the following property holds.
This property is enforced by the navigator function, which guarantees that before an attempt is made to match a candidate subsumee/subsumer pair, all the children of this pair have been matched with each other (successfully or not). However, in the presence of correlation, a subsumee box Q may reference correlated QNCs, which do not originate from its children. In this case, the system wants to ensure that, in addition to the children of Q, the boxes that produce the correlated QNCs that are referenced in Q are also matched before Q is matched. Then, the above property holds, and the QNC translation mechanism can work as is. One way to guarantee this property is to extend the navigator function as described below.
First, for any box Q, let CORR(Q) be the set of boxes that produce the correlated QNCs referenced by Q. (Of course, if Q does not contain any correlated references, then CORR(Q) is empty). Then, for any non-leaf box Q, the level of Q is defined as follows:
Level(Q)=1+max{level(R), where R is a child box of Q or R belongs to CORR(Q)}
The level of leaf boxes is initialized to 0, and then the levels of the other boxes can be computed recursively from the above formula. After computing the levels of each box in the query and the AST graphs, the navigator function initializes an ordered list of candidate subsumee/subsumer pairs by forming all of the pairs between the leaf boxes of the query and AST graphs. The order is determined by the level of each pair of candidate subsumee/subsumer, where the level of the pair is the maximum of the levels of the subsumee and the subsumer. The list is maintained in ascending level order. During each iteration, the navigator function removes the first pair from this list and passes it to the match function. If a match is established, the navigator function forms all of the pairs between the parents of the subsumee and the subsumer and places them in the list, maintaining the order defined above. With this extension, the navigator function guarantees the following property, which is equivalent to the above QNC translation property.
As an example, consider how the query from section 5.1 above can be matched with itself
5.2.2 Translating Correlated QNC References
The navigator function makes it possible (using the method of section 4.4.2 above) to map a correlated reference to QNC X in the query to an equivalent AST QNC Y (or more generally, to an equivalent AST expression). However, although X and Y are indeed equivalent (i.e., they represent the same set of values), they may not be interchangeable within the context of a particular correlated expression. This is illustrated in the example of
Unfortunately, due to the bottom-up nature of the navigator function, it is not possible to know during the matching of Q with A whether X (or Y or W) is the inner or the outer iteration variable. However, as explained below, this distinction is possible at a later stage, when the system tries to match the parent box of a correlated QNC (i.e., PQ with PA in the example). So, an approach to resolve this ambiguity is to initially use any one of the available matches, record which match were used, and at the appropriate later stage, detect if the match used was the correct one, and if not, backtrack and try another match. This approach is described in more detail in the rest of this section.
Let Q be a query box that is being matched with an AST box A. Let X be a query QNC that is produced by box SQ and is referenced via correlation by expression P( . . . , X, . . . ) in Q. To translate the reference to X in P, pick any AST box, say SA, that matches with SQ, is not the root of the AST, and is not a descendant of A, and use the method of section 4.4.2 above to translate X into an equivalent (matching) AST QNC Y. If no such box SA exists, X is translated into itself. This is the same as if X was a rejoin QNC, and indeed, the source of the correlation (box SQ) will be a rejoin child during the matching of its parent (this situation is illustrated by the example of
Now, let PQ and PA be ancestors of Q and A respectively (or any other candidate subsumee/subsumer pair, for that matter). When PQ and PA are matched, the following actions specific to correlation matching take place. First, the system checks whether any children of PQ and PA have been matched conditionally. If so, the system creates a correlation mappings list for the PQ-PA match by unioning together the correlation mapping lists of all the conditional matches among children of PQ and PA. The system then lets the match function do its usual work, testing all the other relevant matching conditions and building the appropriate compensation (which may add more entries into the correlation mappings list). Assuming the match is successful so far, the following additional checks and actions are performed at the end of the matching function for every entry (X, Y) of the correlation mapping list:
Notice that the correlation property mentioned in section 7.1 guarantees that, for any entry (X, Y) with Y not the same as X, either condition 2 or condition 3 will be satisfied at some point. In particular, the system is guaranteed to reach the parent box of at least X or Y, at which point the original assumption to match X with Y will be verified, positively or not.
As a concrete example of the extensions described in this section, consider the pair of AST and query shown in
The AST looks identical to the IN subquery of the query. Both the AST and the IN subquery have a correlated reference to the a2 column of table A. The difference, however, is that in the query, the NOT EXISTS subquery receives its correlation from 2 levels up (i.e., from the A1 instance of table A), whereas in the AST, the source of the correlation is one level up only. Without condition 3 of this section, the system would get a match between the AST and the IN subquery, resulting in the following wrongly rewritten query:
To see how the matching algorithm avoids this wrong rewrite, consider the QGM graphs in
As a result, the match between SEL-2Q and SEL-2A will fail, thus avoiding the above wrong query rewrite.
5.2.3 Pulling Up Correlated Predicates
Section 4.4.1 above stated the condition for pulling predicates from the child compensation up through a GROUP-BY subsumer, and also explained when the system needs to regroup in the parent compensation depending on the exact nature of the pulled up predicates. The discussion there covered predicates that reference either rejoin columns or columns coming from the child subsumer (or both). What about predicates that reference correlated columns? This section first gives an example that illustrates what the system has to be careful about in the presence of correlation, and then states the extended pullup condition and associated compensation that cover correlated predicates.
Consider the example of
As shown, the query and the AST are almost the same—their only difference is the extra correlated query predicate "year1<1995" in box SEL-2Q. When the system matches SEL-2Q with SEL-2A, this extra predicate is placed in the compensation (SEL-1C1). The question is whether the system can pullup this compensation through the next level of matching, i.e., when the system tries to match GB-2Q with GB-2A. It is certainly possible to do the pullup, because the predicate does not need any columns from the subsumer box. Furthermore, there is no rejoin and neither the subsumee nor the subsumer have any grouping columns. As a result, according to section 4.4.1 above, no regrouping is required in the compensation. If the system lets the matching algorithm continue, then the system will rewrite the query as follows:
This rewrite is wrong! For example, let the TRANS table contain the following data:
'Jan. 01, 2001'
'Jan. 02, 2001'
'Jan. 03, 2001'
'Jan. 01, 2000'
'Jan. 02, 2000'
'Jan. 03, 2000'
'Jan. 01, 1995'
'Jan. 02, 1995'
'Jan. 03, 1995'
'Jan. 01, 1994'
'Jan. 02, 1994'
'Jan. 03, 1994'
'Jan. 01, 1990'
'Jan. 02, 1990'
'Jan. 03, 1990'
With these data, the AST contains just one row: (1990, null), whereas the result of the query contains 2 rows: (1995, null) and (1990, null). Obviously, the rewritten query does not give the same result as the original, and there is no other way to derive the result of the query from the AST, because the AST does not contain the necessary information.
The error with the above rewrite occurred when the system pulled the correlated predicate "year1<1995" up through the GB-2A box. In particular, if this predicate is false (say that year1 is 1995) and is applied before the grouping in the subquery, then the result of the subquery will be one record with sm2 set to null. Since sm1 for 1995 is also null, the predicate in the outer query block will be satisfied, and the row (1995, null) will be returned by the query. In contrast, if the system pulls up the correlated predicate above the grouping, then the result of the subquery will be the empty table, and 1995 will not be selected by the outer query block.
This anomaly is due to the semantics of grouping—if the input table is empty and there are no grouping columns, the GROUP-BY box returns one row (with a 0 value for count and null values for the other aggregate functions). If, however, there are grouping columns, then GROUP-BY returns an empty result on an empty input, and as a result, the effect of a predicate that does not reference any grouping columns is the same whether the predicate is applied before or after the grouping. To remedy the anomaly in the no-grouping-columns case, the system can add in the compensation a GROUP-BY box with no grouping columns, if any predicates have been pulled up. Another relevant observation is that as far as a correlated subquery is concerned, references to correlated QNC act exactly like constants: the values of the correlated QNCs are fixed by the caller of the subquery, and remain fixed during each computation of the subquery. With these observations in mind, the pullup condition and associated compensation from section 4.4.1, are extended as follows:
This concludes the description of the preferred embodiment of the invention. The following describes some alternative embodiments for accomplishing the present invention. For example, any type of computer, such as a mainframe, minicomputer, or personal computer, could be used with the present invention. In addition, any software program adhering (either partially or entirely) to the SQL language could benefit from the present invention.
In summary, the present invention discloses a method, apparatus, and article of manufacture for optimizing database queries using an automatic summary table. A query is analyzed using matching and compensation tests between the query at least one correlated subquery within the query and the automatic summary table to determine whether expressions occurring in the query, but not in the automatic summary table, can be derived using the automatic summary table. If so, the query is rewritten so that the automatic summary table is used.
The foregoing description of the preferred embodiment of the invention has been presented for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed. Many modifications and variations are possible in light of the above teaching.
|Cited Patent
|Filing date
|Publication date
|Oct 9, 1990
|Jan 4, 1994
|Hewlett-Packard Company
|View composition in a data base management system
|Dec 13, 1991
|Nov 22, 1994
|International Business Machines Corporation
|Computer automated system and method for optimizing the processing of a query in a relational database system by merging subqueries with the query
|Jun 14, 1993
|Aug 6, 1996
|Hewlett-Packard Company
|Method and apparatus for query optimization in a relational database system having foreign functions
|Jun 6, 1994
|Aug 19, 1997
|Lucent Technologies Inc.
|Query optimization by predicate move-around
|Jan 13, 1997
|Oct 28, 1997
|Amdahl Corporation
|Operating system and data base using table access method with dynamic binding
|May 23, 1996
|Apr 7, 1998
|Microsoft Corporation
|Database view generation system
|Apr 23, 1997
|Sep 8, 1998
|Ncr Corporation
|Interactive data analysis employing a knowledge base
|Sep 26, 1996
|Sep 22, 1998
|Speedware Ltee./Ltd.
|Database query system
|Jun 30, 1997
|Oct 13, 1998
|International Business Machines Corporation
|Optimization of correlated SQL queries in a relational database management system
|Sep 3, 1996
|Dec 8, 1998
|Matsushita Electric Industrial Co., Ltd.
|Method for presenting information on display devices of varying sizes
|Oct 23, 1995
|Jan 26, 1999
|Ncr Corporation
|Optimization of SQL queries using hash star join operations
|Feb 6, 1997
|Mar 16, 1999
|Ncr Corporation
|Optimization of SQL queries involving aggregate expressions using a plurality of local and global aggregation operations
|Jul 16, 1997
|Apr 27, 1999
|At&T Corp
|Method and system for using materialized views to evaluate queries involving aggregation
|Jun 21, 1996
|Jan 11, 2000
|Oracle Corporation
|Using overlapping partitions of data for query optimization
|Oct 31, 1997
|Feb 8, 2000
|Oracle Corporation
|Summary table management in a computer system
|Oct 31, 1997
|Feb 8, 2000
|Oracle Corporation
|Summary table query routing
|Jun 30, 1997
|Jun 27, 2000
|International Business Machines Corporation
|Shared nothing parallel execution of procedural constructs in SQL
|Dec 27, 1995
|Jul 11, 2000
|Lucent Technologies, Inc.
|Method and apparatus for optimizing database queries involving aggregation predicates
|Mar 4, 1998
|Jan 9, 2001
|International Business Machines Corporation
|Data recovery in a transactional database using write-ahead logging and file caching
|Mar 27, 1998
|Mar 6, 2001
|Red Brick Systems, Inc.
|System and method for rewriting relational database queries
|May 22, 1998
|Mar 20, 2001
|Oracle Corporation
|Method and apparatus for incremental refresh of summary tables in a database system
|May 18, 1999
|Jun 19, 2001
|Oracle Corporation
|Summary table management in a computer system
|Mar 26, 1999
|Nov 13, 2001
|Compaq Computer Corporation
|System and method for computing running and moving sequence functions in a database system
|Dec 28, 1998
|Dec 25, 2001
|Oracle Corporation
|Method and apparatus for efficiently refreshing sets of summary tables and materialized views in a database management system
|Aug 13, 1998
|Jan 15, 2002
|International Business Machines Corporation
|Exploitation of subsumption in optimizing scalar subqueries
|Apr 2, 1999
|Jan 22, 2002
|Sybase, Inc.
|Database system with methods for optimizing performance of correlated subqueries by reusing invariant results of operator tree
|Dec 16, 1998
|Jun 25, 2002
|Microsoft Corporation
|Evaluating SQL subqueries
|Dec 28, 1998
|Sep 10, 2002
|Oracle Corporation
|Using a materialized view to process a related query containing a one to many lossless join
|Sep 14, 1998
|Oct 1, 2002
|International Business Machines Corporation
|Automatic recognition and rerouting of queries for optimal performance
|Dec 17, 1999
|Dec 17, 2002
|International Business Machines Corporation
|Support for summary tables in a heterogeneous database environment
|Sep 27, 2000
|Jan 21, 2003
|Microsoft Corporation
|Cost based materialized view selection for query optimization
|Dec 21, 1999
|Jan 28, 2003
|International Business Machines Corporation
|Deriving uniqueness for indices on summary tables
|Dec 17, 1999
|Mar 11, 2003
|International Business Machines Corporation
|Support for summary tables in a database system that does not otherwise support summary tables
|Sep 22, 1999
|May 6, 2003
|International Business Machines Corporation
|Cube indices for relational database management systems
|Sep 6, 2000
|May 20, 2003
|The Trustees Of The University Of Pennsylvania
|Systematic approach to query optimization
|Dec 16, 1999
|Jun 17, 2003
|International Business Machines Corporation
|Intelligent compilation of materialized view maintenance for query processing systems
|Oct 2, 2001
|Mar 16, 2004
|Oracle International Corporation
|Incremental refresh of materialized views for many-to-many relationships
|Oct 4, 1999
|Apr 6, 2004
|International Business Machines Corporation
|Schema mapping system and method
|Dec 2, 1999
|Jul 13, 2004
|International Business Machines Corporation
|Incremental maintenance of summary tables with complex grouping expressions
|Apr 2, 2002
|Nov 23, 2004
|Sybase, Inc.
|Database system providing methodology for acceleration of queries involving functional expressions against columns having enumerated storage
|Feb 11, 2000
|Jan 25, 2005
|International Business Machines Corporation
|Analyzing, optimizing and rewriting queries using matching and compensation between query and automatic summary tables
|Nov 5, 2002
|May 8, 2003
|International Business Machines Corporation
|Optimizing correlated queries using automatic summary tables
|Feb 27, 2003
|Sep 4, 2003
|Fred Koo
|Redundant join elimination and sub-query elimination using subsumption
|Mar 24, 2004
|Sep 16, 2004
|Simmen David E.
|Query optimization technique for obtaining improved cardinality estimates using statistics on pre-defined queries
|Oct 31, 2003
|May 5, 2005
|Balmin Andrey L.
|XPath containment for index and materialized view matching
|Mar 21, 1997
|Sep 24, 1997
|Pilot Software Inc
|Computer system and computer-implemented process for classifying records in a computer database
|Sep 26, 2001
|Apr 3, 2002
|Microsoft Corporation
|Cost based materialized view selection for query optimization
|Aug 19, 1997
|Mar 5, 1998
|At & T Corp.
|Method and system for using materialized views to evaluate queries involving aggregation
|Feb 10, 2004
|Aug 26, 2004
|Netezza Corporation
|Materialized view system and method
|Ayla Sayli et al. "A fast transformation method to semantic query optimisation", Database engineering and applications symposium, 1997 proceedings, Aug. 1997, pp. 319-326.
|Bello et al., "Materialized Views in Oracle," Proceedings of the 24<SUP>th </SUP>VLDB Conference, NY, USA, 1998, 659-664.
|Bernd Ammann et al. "Gram: A graph data model and query language", conference on Hypertext and hypermedia proceedings of the ACM conference on Hypertext, 1993, pp. 201-211.
|Bertram Ludascher et al. "Navigation-driven evaluation of virtual mediated views", EDBT 200, LNCS 17777, pp 150-165.
|Chiang Lee et al. "optimizing large join queries using a graph-based approach", IEEE transactions on knowledge and data engineering, vol. 13, No. 2, Mar./Apr. 2001, pp. 298-315.
|Colby et al., "Red Brick Vista(TM): Aggregate Computation and Management," Proceedings of the 14<SUP>th </SUP>International Conference on Data Engineering, Orlando, Florida, 1998, 174-177.
|Franz et al., LTCS-Report 98-06, "Computing the Least Common Subsumer and the Most Specific Concept in the Presence of Cyclic ALN-Concept Descriptions," Aachen University of Technology Research Group for Theoretical Computer Science, RWTH LTCS-Report, 1-33.
|Jonathan Goldstein et al. "optimization queries using materilaized views: a practical, scalable solution", proceedings of the 2001 ACM SIGMOD international conference on management of data, 2001, pp. 331-342.
|Joseph M Hellerstein, "Optimization techniques for queries with expensive methods", ACM transactions on database systems, vol. 23, No. 2, Jun. 1998, pp. 113-157.
|Jun Rao et al. "Resuing invariants: a new strategy for correlated queries", proceedings of the 1998 ACM SIGMOD international conference on Management of data, 1998, pp. 37-48.
|Kenneth W.Ng et al. "dynamic query re-optimization",published 2003, 10 pages.
|Lehner et al., "Fast Refresh Using Mass Query Optimization," Data Engineering, Proceedings 17<SUP>th </SUP>International Conference, 2001, 391-398.
|Michael et al., "Automated Summary Tables and Aggregate Navigation in DB2 Universal Database," Solutions Journal, The IDUG Solutions Journal, Fall 1999, 6(3): 1-5.
|Navin Kabra et al. "efficient mid-query re-optimization of sub-optimial query execution plans", SIGMOD '98, pp. 106-117.
|Randall G Bello et al. "materialized views in oracle", proceedings of the 24th VLDB conference new yourk, USA, 1998, pp. 659-664.
|Sergio Flesca et al. "rewriting queries using views", IEEE transactions on knowledge and data engineering, vol. 13. No. 6, 2001, pp. 980-995.
|Srivastava et al., "Answering Queries with Aggregation Using Views," Proceedings of the 22<SUP>nd </SUP>VLDB Conference Mumbai, Bombay, India, 1996, 318-329.
|Tetsuya Takahashi et al. "Implementation of object view query on a relational database",, no date, 6 pages.
|V. Markl et al. "LEO: An autonomic query optimizeer for DB2", IBM systems journal, vol. 42, No. 1 2003, pp. 98-106.
|Zaharioudakis et al., "Answering Complex SQL Queries Using Automatic Summary Tables," SIGMOD Conference, 2000, 105-116.
|Citing Patent
|Filing date
|Publication date
|Apr 29, 2003
|Oct 30, 2007
|International Business Machines Corporation
|Independent deferred incremental refresh of materialized views
|Aug 2, 2007
|Aug 10, 2010
|International Business Machines Corporation
|Method and system for response time optimization for task list retrieval from databases
|Apr 16, 2008
|Nov 23, 2010
|International Business Machines Corporation
|Cost-based subquery correlation and decorrelation
|Oct 31, 2007
|Jan 11, 2011
|D-Wave Systems Inc.
|Processing relational database problems using analog processors
|Nov 15, 2010
|Oct 4, 2011
|D-Wave Systems Inc.
|Processing relational database problems using analog processors
|Jun 30, 2011
|Jan 21, 2014
|International Business Machines Corporation
|Database query optimization
|Sep 29, 2011
|Oct 27, 2015
|Pivotal Software, Inc.
|RLE-aware optimization of SQL queries
|Oct 26, 2015
|Aug 30, 2016
|Pivotal Software, Inc.
|RLE-aware optimization of SQL queries
|Apr 29, 2003
|Jun 24, 2004
|Sidle Richard S.
|Independent deferred incremental refresh of materialized views
|Oct 31, 2007
|May 22, 2008
|Macready William G
|Processing relational database problems using analog processors
|Apr 16, 2008
|Sep 4, 2008
|International Business Machines Corporation
|Cost-based subquery correlation and decorrelation
|Aug 2, 2007
|Feb 5, 2009
|International Business Machines Corporation
|Method And System For Response Time Optimization
|Nov 15, 2010
|Mar 10, 2011
|D-Wave Systems Inc.
|Processing relational database problems using analog processors
|Mar 28, 2008
|Feb 18, 2009
|Searete LLC
|Effectively documenting irregularities in a responsive user's environment
|U.S. Classification
|1/1, 707/999.002, 707/999.005
|International Classification
|Cooperative Classification
|European Classification
|Nov 5, 2002
Owner name: INTERNATIONAL BUSINESS MACHINES CORPORATION, NEW Y
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:ZAHARIOUDAKIS, MARKOS;PIRAHESH, MIR HAMID;COCHRANE, ROBERTA JO;AND OTHERS;REEL/FRAME:013486/0671;SIGNING DATES FROM 20021001 TO 20021104
|Feb 12, 2008
|Reissue application filed
Effective date: 20071011
|Aug 30, 2010
|Maintenance fee reminder mailed
|Jan 23, 2011
|Lapse for failure to pay maintenance fees
|Mar 15, 2011
|Expired due to failure to pay maintenance fee
Effective date: 20110123
|Jul 11, 2011
Owner name: GOOGLE INC., CALIFORNIA
Effective date: 20110630
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:INTERNATIONAL BUSINESS MACHINES CORPORATION;REEL/FRAME:026569/0275


text:
Waterjet Corporation s.r.l. of Monza, Italy, has established Waterjet USA LLC to serve as its North American sales, service and parts organization. Massimo Denipoti will serve as president of Waterjet USA, located in Geneva, Illinois. The Italian machine builder specializes in 2D and 3D cutting systems for the metal fabrication and machining industries, among others.
"We made the decision to directly invest in the North America market," stated Massimo Russo, Waterjet Corporation president, "as a logical next step to earlier successes here utilizing importers." The company's systems were previously sold by a Canadian distributor and, most recently, through Mitsubishi-owned MC Machinery (Wood Dale, Illinois). The North American company will offer two- to six-axis waterjet cutting systems as well as custom solutions.
Waterjet USA LLC, visit waterjetusa.com.

subset: commoncrawl


text:
By continuing to use our site, you accept the placing (i) of cookies to determine the site's audience, visits, and your navigation, to provide offers adapted to your areas of interest and personalised advertising, and (ii) of third-party cookies designed to suggest videos, share buttons, and relay content from social media.
See more
The Saint Paul hotel restaurant will be exceptionally closed in 2017.
In order to always provide you with the best service, our concierge team will recommend you the best restaurants of the village or surroundings.
If hungry, our residents will benefit from our new room service card 24/24.


text:
THE Royal Bank of Scotland has sold off a luxury five-storey Edinburgh townhouse that was being used free of charge by its former chairman.
RBS, a bank majority-owned by the taxpayer, disposed of the A-listed Georgian property for over £1.8m following criticism that its initial purchase was a sign of the institution's profligacy.
MPs welcomed the sale.
Loading article content
RBS was one of the world's biggest companies until a series of calamitous decisions, including the ill-fated £47bn takeover of Dutch bank ABN Amro, led to its collapse in 2008.
The previous Labour government rescued RBS with a £45bn bailout, with the taxpayer eventually controlling an 82% stake in the bank.
In 2009, the Sunday Herald revealed that, despite the huge injection of public money, RBS was holding on to a lavish Edinburgh townhouse purchased three years earlier for £1.6m.
The property at 44 Heriot Row - one of the Capital's most exclusive streets - was for the sole use of the then chairman Sir Tom McKillop when was in Edinburgh.
The townhouse was empty when McKillop was not in the Capital.
It boasted five double bedrooms, three bathrooms, a dining room, drawing room and a living room.
Extensive renovations were also pushed through after the purchase, according to Edinburgh city council planning documents.
Critics described the property as "extraordinarily excessive" and a "prime candidate for cost-cutting".
After this newspaper broke the story, an RBS spokesperson said the bank would look at all options for the property, including disposal.
It can now be revealed that bank bosses subsequently sold it for £1,885,000 - a gain of nearly £300,000.
Sources believe the sale should be seen in light of the bank's radical downsizing.
Around 40,000 jobs have been lost at the bank since the bailout, with thousands more posts expected to be axed.
It was reported last month that the bank, still majority owned by the taxpayer, was likely to make losses of up to £8bn for 2013.
Branches have also been closed.
As a result the bailout, RBS went from having a reputation for excellence to becoming a byword for financial incompetence.
Cathy Jamieson, Scottish Labour's Treasury spokesperson, said: "We can only hope that these highly-paid bankers can get by without their luxury Edinburgh pad when they visit the city.
"This is a classic example of the excesses of the banking industry gone out of control and at a time when the people who bailed out the banks face a cost of living crisis, it is only common sense that the bankers do without these luxuries.
Scottish Liberal Democrat MP Mike Crockart said: "It's good news for the taxpayer that RBS has seen sense and sold what could only be seen as the world's most flamboyant government-owned bachelor-pad. As the bank gets back on its feet the taxpayer needs to see less penthouses and more profits."
An RBS spokesperson said: "The new management at RBS quickly decided that this property was no longer required and it was sold in 2010. This sale was part of a much wider review of all our property assets worldwide."


text:
For an Iraq Contractor, Duty, and Then Death
By ALAN FEUER
Published: August 8, 2007
Brenton Thomas Gray was no longer a soldier when he died a soldier's death last August on a northern Baghdad road. There were an armored car, a curbside bomb, a sizzling explosion. The sky went black with smoke and melting tar.
Mr. Gray, 34, was a private security expert, a navigator for the Baghdad team of Cochise Consultancy, and one of the thousands of men who earn their paychecks in Iraq, living on their wits and carrying a gun.
Military officials estimate that 125,000 contractors are working in the country, nearly the number of American troops. The figures on those who carry guns vary widely, depending on the source, but seem to settle on about 20,000. As of June 30, government figures show, 1,001 contractors had died in Iraq since the start of the war.
A eulogy is spoken by tradition at the burial, but the story of a life is just as likely to be spoken in a bar. Mr. Gray's family took that path last week, marking their year of grief by visiting his grave, then visiting a pub.
Dying in a country far from home is a contractor's lot, but so is being branded a mercenary, a cowboy, a soldier of fortune, said some of the men who attended the gathering on Saturday in this humid town of horse farms 40 miles northwest of Fayetteville.
The pay is good, they said, though there are reasons beyond the monthly check to work, as they call it, downrange in danger's way.
''Yeah, you can make a buck,'' said Wayne Colombo, a white-haired warrant officer who, well before he worked with Mr. Gray, served with a Special Forces A-team in Vietnam. ''But you're also back with guys you know, doing what you can -- and doing what you know.''
Brenton Gray, by all accounts, did what he knew. He was born into the service, the son of an Army colonel, a base brat raised on installations in Kentucky, Colorado, Kansas, Idaho and Germany. After high school, he joined the Rangers, serving with the First Battalion, 75th Regiment at Hunter Army Airfield near Savannah, Ga. He was then assigned to Fort Bragg, N.C., and the 51st Infantry, Long Range Reconnaissance/Surveillance Unit, before he earned the Green Beret of the Special Forces.
It would be easy to tell his life through military honors, like his cherished ''triple canopy'' -- the Army's term for Airborne, Ranger and Special Forces tabs worn stacked atop one another on a soldier's left sleeve. In the contract world, where tales of prowess are often tossed like poker chips, he was a consummate professional, his colleagues said, quiet, tactically proficient, focused.
''I didn't even know he was S.F.'' -- Special Forces -- ''until someone else told me,'' said a husky former Ranger who worked with him at Cochise. ''All he talked about was his family life at first.''
Early in the day on Saturday, that family -- his mother, Marsha; his sister, Randi; and his wife, Courtnay -- raised a toast to him at the Old Bethesda Cemetery, where his headstone read U.S. Army, loving husband, father, hero -- in that order. Champagne was served from the tailgate of a minivan. It was sipped by bearded bikers and equestrian girls in gingham. The mourners raised their glasses to a rich summer sun, and military contract workers in New Zealand, Israel, Kuwait, South Africa and Britain had been told to set their watches for a drink at 4 p.m.
No one goes dry on the anniversary of a contractor's death. The party moved from the graveyard to a tavern near the railroad tracks. Your money wasn't good there. Mr. Gray's favorite drink, a gin and tonic, was placed beside his portrait on the bar.
Although the monthly pay can reach $18,000, the contractor's life was not for Doug Jenkins or Bill Strausburg, two active-duty Special Forces soldiers who did not know Mr. Gray but were drawn to the bar out of respect.
''It's a trust issue; I trust the guys I work with now,'' said Mr. Jenkins, a warrant officer and medic. ''You can make good money, but you got to be around, you got to be alive, to spend it.''
Besides, he said, private contracts are really only good as short-term work. The health-care benefits are limited; there are no pensions.
The room seemed physically to stiffen as Mr. Gray's teammates from Iraq walked in, a tight-knit group that installed itself at the bar. One of them set out the portrait of Mr. Gray with the smoky circle of an ammunition detonation rising in a halo at his head.
''How long did you know my son?'' Mr. Gray's mother asked.
The team leader said about two years.
Mrs. Gray touched another picture of her son, in a photo album lying on the bar.
''That's my fair-haired boy,'' she said. And both of them walked away.
The rest of the night went by with churning stories -- of Mr. Gray on his skateboard; of Mr. Gray sleepwalking; how he used to jump from airplanes at 30,000 feet, at night, falling through the clouds. The officer's son who never wanted to ride his father's coattails; the young boy back from basic training who, literally, married the girl next door.
Then, as he himself might have wanted, the evening slipped away from Brenton Gray and toward the living -- toward talk of wives and colleagues, stateside jobs and daughters dating boys with spiky hair. The everyday mixed with the unprintable. Another round was bought: beers with Scotch-and-coke.
It was getting on toward dusk when the two Special Forces soldiers walked outside, and headed toward their Harleys and the pair of flags that flew on wooden dowels behind the seats. Were they leaving? No, but it was sunset.
''Proper care of the flag,'' one said, sheathing it in plastic. ''Eighteen years. It's a hard habit to break.''
PHOTOS: A photo of Mr. Gray, and beside it, his favorite drink.; Jill Jernigan, left, a childhood friend of Brenton T. Gray, with his widow, Courtnay, last weekend at a tribute to Mr. Gray, a private security expert on contract in Iraq, a year after his death.; Mr. Gray's colleagues joined family members and friends at the cemetery where he is buried. (PHOTOGRAPH BY PHOTOGRAPHS BY JEREMY M. LANGE FOR THE NEW YORK TIMES)


text:
I recently had an open rhinoplasty (about 4 weeks ago) to remove my dorsal hump. However, the surgery has proven so far to be ineffective. Because a great deal of the swelling has subsided, I can now see my hump quite defined (maybe even more so than pre-op). In your medical opinion, do you believe that removing such a hump is too difficult and therefore I should try a non-surgical rhinoplasty? If any more additional information is needed, I will be happy to provide it on request.
Should I Get a Revision Rhinoplasty or Opt for a Non-surgical Method? (photo)
Doctor Answers 9
Rhinoplasty and result
At four weeks after surgery it is too early to see the final result after a rhinoplasty,. Give it time to settle down. Good luck.
Best Treatment for Residual Dorsal Hump One Month After Open Rhinoplasty
Hi Colorado,
At this point I would recommend waiting, allowing for the swelling of your open approach rhinoplasty to resolve. An excellent rhinoplasty surgeon will even consider revision rhinoplasty for at least 6 to 12 months. If after another month or so you are concerned about your dorsal profile, then I would recommend a hyaluronic acid filler such as Restylane to camouflage the bump. That is only if you are willing to add to your dorsal profile. We like to show our patients what their nose will look like after filler by using computer imaging prior to treatment. Good luck and be well.
Dr. P
Should I Get a Revision Rhinoplasty or Opt for a Non-surgical Method?
From the photo provided, there appears to be a slight residual dorsal hump but at 1 month post Rhinoplasty it can't be determined if this is swelling, cartilage or bone. Since you have to wait a minimum of 6 months before you could have a Revision Rhinoplasty and injecting filler into the nasal tissues is not adviseable until then....IMHO, you should just wait and see what the nose looks like at 6 months.
Learn more: http://www.drfpalmer.com/Rhinoplasty.html
You might also like...
Healing takes time
Thank you for your photos. Healing after rhinoplasty is a long process that takes about a year to see the final result you will have. Be patient with your healing. It is best not to perform surgery nor any injections into the nose during the months after surgery. I hope this helps.
Revision for a hump
I think that you should wait for the normal course of healing to occur. For a rhinoplasty, this can up to 1 year. Only after that time, can you have a revision if necessary.
Learn more: http://www.drbustillo.com
Should I Get a Revision Rhinoplasty or Opt for a Non-surgical Metho
I have issues with this presentation and your understanding of surgery. Your surgeon should have pre operatively informed you the longer healing time interval with any rhinoplasty, especially the open techniques. In asking your questions you NEED to post a before photo so we can compare the physical/surgical issues. Thus allow at least 4 to 6 months of healing before considering any additional interventions, whether surgery or fillers.
Rhinoplasty post-op
Dear ColoradRanger,
- That area of the nose has the thinnest skin
- That means that even the smallest bit of swelling will look like a bump
- Can you push that skin down?
- If it remains, you should re-evaluate the nose and if it is just the bump that is present, you can fix that non-surgically
Best regards,
Nima Shemirani
Revision Rhinoplasty or Non-Surgical treatment
4 Weeks after surgery is still an inadequate amount of time upon which to base an opinion about the result. You will need to wait at least six months to make a final determination. However, assuming nothing changes then adding a filler in the depression below the bump can adequately camouflage it and eliminates the need for surgery. If you are seeking a permanent solution approach your surgeon with your concern. Most surgeons want happy patients and will be willing to perform touch ups at reduced cost to the patient. Each surgeon is different in this regard but it is worth it to ask. If you have lost confidence in your surgeon get several evaluations from surgeons who do a lot of nasal work. See what they would suggest. You could go either route to get the final result you want. Best of Luck Dr Harrell
Learn more: http://www.westonsurgery.com
Open Rhinoplasty at 4 Weeks
After an open rhinoplasty for hump resection, you should wait at least 6 months before considering a revision. It is not unreasonable to revise this if there is a residual hump. Kenneth Hughes, MD Los Angeles, CA
Learn more: http://www.hughesplasticsurgery.com/Rhinoplasty.php
These answers are for educational purposes and should not be relied upon as a substitute for medical advice you may receive from your physician. If you have a medical emergency, please call 911. These answers do not constitute or initiate a patient/doctor relationship.


text:
EngenderHealth Denounces Plan to Implement Expanded Global Gag Rule
- EngenderHealth strongly denounces the plan released to implement the dramatically expanded Global Gag Rule, also known as the Mexico City Policy. Read more.
Crucial Conversations in Ethiopia
- Coffee and conversation helps reduce intimate partner violence. Watch our latest video here.
Ensuring the right to quality hormonal implant removal services
- Read a recently released new brief here.
"When women are empowered, they bring peace to homes, communities, and countries."
- Ida Ntawundora, EngenderHealth's Country Program Manager for Burundi, shares her experiences.
Latest News
- We Need to Change the Way We Think About Reproductive Rights
- EngenderHealth Announces New FP2020 Commitment at Family Planning Summit in London
- EngenderHealth Mourns Loss of Dr. Babatunde Osotimehin
- EngenderHealth Welcomes Dr. Tedros Ghebreyesus as new Director-General, World Health Organization
- How a Simple Checklist Can Save Women's Lives: #EndFistula
- International Day to End Obstetric Fistula is on May 23rd. Check out our #EndFistula toolkit.
- EngenderHealth Welcomes New Member to the Executive Team
- EngenderHealth Denounces Plan to Implement Expanded Global Gag Rule
- New Gender Resource Advances Sexual and Reproductive Health and Rights
- On International Women's Day, read Ulla Müller's article, Contraception in the Crosshairs: The Real Impact of the Global Gag Rule
- EngenderHealth Expresses Strong Support for She Decides Initiative
- EngenderHealth Establishes Policy and Advocacy Arm in Response to Urgent Fight to Protect Women's Reproductive Health and Rights
- EngenderHealth Statement on the Imposition of the Global Gag Rule 2017
EngenderHealth on Twitter
Loading tweets...


text:
Questions & Answers
Active Directory, AS/400, Backup, Business Intelligence, Career Development, CIO, Cisco, CRM, Data Management, Database, DataCenter, Development, Hardware, IBM DB2, IBM iSeries, IT Strategy, Linux, Lotus Domino, Lotus Notes, Marketing, Microsoft Access, Microsoft Excel, Microsoft Exchange, Microsoft Exchange 2003, Microsoft Exchange 2007, Microsoft Outlook, Microsoft Outlook 2003, Microsoft Outlook 2007, Microsoft Windows, Microsoft Windows 7, Microsoft Windows Server 2003, Microsoft Windows XP, Mobile, Networking, Oracle, Routers, RPG, RPGLE, SAP, Servers, SQL, SQL Server, SQL Server 2005, Storage, Virtualization, Visual Basic, VoIP, VPN, Windows Server, Windows Server 2008 ...VIEW ALL TAGS
- Business Intelligence
- Career Development
- Channel
- Cloud Computing
- Compliance
- Consumerization
- Content Management
- Data Management
- Database
- DataCenter
- Desktop Management
- Development
- Email Administration
- Hardware
- IT Strategy
- Linux
- Lotus Domino
- Marketing
- Microsoft Exchange
- Microsoft Windows
- Mobile
Query database sizes in SQL Server 2008 R2
I'm using SQL Server 2008 R2 that has over 500 databases. What would be the easiest and most efficient way to query databases of all sizes. The output should have the following columns:DatabaseNameDataFilesSizeLogFilesSizeThanks for all the help!Thanks! We'll email you
when relevant content is
added and updated.Thanks! We'll email you
when relevant content is
added and updated.
Cleaning MySQL InnodB storage engine
I have a friend who needs to clean his MySQL InnoDB storage engine because it's still storing data from deleted tables. Is it possible to do that? Does he have to create a new database every single time? Thank you.
How to export / import MySQL databases
For my job, I have to make sure to backup all of our MySQL databases (there's over 100). For this, can I export all of them at the same time, followed by importing them into the server? Is that possible?
Is a MySQL primary key indexed automatically?
Hello experts, Would anyone know if a primary key is automatically indexed in MySQL? Do I actually have to create the index? Also - would this be possible in InnoDB too? Thanks!
MySQL database export using Command Prompt
I have a pretty large MySQL database and I need to export it ASAP. Can I use the Command Prompt to do this? Or is there another way?
What data type should I use for storing currency values in MySQL?
I'm using MySQL and I'm wondering what's the best data type if I want to store currency values in it. Is there a certain command?
Specifically for MySQL, can I see if my database has any indexes? If not the database, can I see on a particular table? Appreciate the help.
Select all MySQL columns except for one
Is there a statement in MySQL that would select all of my columns (except for one specific column) in a table? Please note that there's roughly 50 columns in total. Thanks for the help!
Trace MySQL queries on Linux server
I'm using my Linux server and I was hoping there's a way to trace all of my live MySQL queries. Is that possible? I have a listener set up already (if that helps).
Show last MySQL queries on servers
How can I show the last queries executed on all of my servers in MySQL? Is there a specific query to do this?
Should I switch over to SAP BI?
I am working as a Lead QA Analyst (Manual Testing). I don't have a programming knowledge. Now I want to switch over to SAP BI not in testing. So before that I want to know if I can do SAP BI. Still is it having scope? I asked my friends but still I didn't get proper answers. So I'm eagerly waiting...Thanks! We'll email you
when relevant content is
added and updated.Thanks! We'll email you
when relevant content is
added and updated.
Can I perform incremental backup without having initial full backup?
How to script entire SQL Server database
Does anyone know if there's a possible way to get a script of an entire SQL Server database? I'm taking about columns, tables, stored procedures, etc. Thank you.
Store IP address in SQL Server
Is there a specific datatype I should use for storing my IP address in SQL Server? Furthermore, when I select the datatype, will it be easy to filter my IP address?Thanks! We'll email you
when relevant content is
added and updated.
SQL Server 2008: Maximum number of characters for NVARCHAR
In SQL Server 2008, I just declared one of my columns as type NVARCHAR (Max). What would be the maximum number of characters for the NVARCHAR? Thanks!Thanks! We'll email you
when relevant content is
added and updated.
Storing passwords in SQL Server database
What's the best way to store my passwords in a SQL Server database (it's actually for 2008 and 2012)? For the past few years, I've been using a .NET encryption library, followed by storing them in the database. Should I continue with this method or figure something else out?
Delta or incremental backup in AS/400
How can I do a delta or incremental backup in AS/400?Thanks! We'll email you
when relevant content is
added and updated.
Over the past few months, I've been running SQL Server 2008 on my machine. My default port is 1433 but it's currently not listening at this port. I still can't find it - I tried SSMS and registry but nothing is working. What can I do?
Find current SQL Server database transaction level
How can I find the current SQL Server database's transaction level? Thank you very much
NAND memory flash has to be reprogrammed in Avaya 9611-g
This happens in those kind of phones, Avaya 9611-g and 9608-g 9621-g. Do you know why the NAND memory flash after be reprogrammed, if you try make phone call, it's impossible when you have two phones that were reprogrammed even with new flash.


text:
PLEASE NOTE: West Frankfort may be a smaller town so be sure to check all locations and airports. Contact us if you have any questions.
The closest major airport to West Frankfort, Illinois is Williamson County Regional Airport (MWA / KMWA). This airport is in Marion, Illinois and is 15 miles from the center of West Frankfort, IL. If you're looking for domestic flights to MWA, check the airlines that fly to MWA.
Search for direct flights from your hometown and find hotels near West Frankfort, IL, or scroll down for more international airports or domestic airports. You can also browse local airports if you're a pilot.
120 miles: Saint Louis, MO (STL / KSTL) Lambert-St. Louis International Airport
209 miles: Nashville, TN (BNA / KBNA) Nashville International Airport
217 miles: Louisville, KY (SDF / KSDF) Louisville International Airport
230 miles: Indianapolis, IN (IND / KIND) Indianapolis International Airport
15 miles: Marion, IL (MWA / KMWA) Williamson County Regional Airport
68 miles: Paducah, KY (PAH / KPAH) Barkley Regional Airport
73 miles: Cape Girardeau, MO (CGI / KCGI) Cape Girardeau Regional Airport
88 miles: Belleville, IL (BLV / KBLV) Scott Air Force Base
115 miles: Evansville, IN (EVV / KEVV) Evansville Regional Airport
120 miles: Saint Louis, MO (STL / KSTL) Lambert-St. Louis International Airport
124 miles: Owensboro, KY (OWB / KOWB) Owensboro-Daviess County Regional Airport
33 miles: Carbondale, IL (MDH / KMDH) Southern Illinois Airport
36 miles: Mount Vernon, IL (MVN / KMVN) Mount Vernon Airport
44 miles: Fairfield, IL (KFWC / FWC) Fairfield Municipal Airport
48 miles: Georgetown, KY (DQP) Marshall Field
53 miles: Centralia, IL (ENL / KENL) Centralia Municipal Airport
Note: Some distances are straight-line estimates, click on the link to calculate actual driving distance.
Travelmath helps you find the closest airport to any city, as well as a list of smaller local airports. You can use these pages to plan your trip and figure out the easiest way to get to your destination. Many times there are multiple airports near the city you want to visit, so you can often find a cheaper flight into a different airport. This is especially useful if you are getting a rental car, since it might be better to drive a bit farther in order to save money on airfare. If you're booking an international flight, you probably want the closest major airport, otherwise if you're a pilot you may be looking for a local airport. Use this tool along with the flight distance pages to plan your travel.


text:
One sure and simple way to enhance a PowerPoint presentation is to add a video from YouTube. This website is chock-full of educational and entertaining videos that can add a dynamic element to your content. Whether you want to use your own footage or "borrow" it from somebody else's channel, here are the five ways to insert a YouTube video into a PowerPoint presentation.
- Insert it as an online video
- Use an embed code
- Use the YouTube feature
- Insert as a Web Object
- Screen capture a YouTube video
- How to choose the best method
1. Insert it as online video
Starting from version 2010, PowerPoint includes a built-in tool to insert a YouTube video onto a slide. Here are the steps on how to use it:
- Go to YouTube and find the video that you would like to embed into your presentation.
- Copy the link from the address bar.
- Open your presentation and select the slide where you would like to place the video.
- Go to the Insert tab and choose Video → Online Video.
- Paste the link in the first address bar of the opened window. Using this field, you also can search for a video on YouTube directly. Click on the magnifying glass or press Enter on your keyboard to search.
- Click on the thumbnail of the video and press Insert.
- You can adjust the video size just like with any other slide object.
- Fast, easy to do.
- Requires viewers to have an Internet connection, the playback is not customizable. Cannot be done in PowerPoint 2007.
2. Use an embed code
A more advanced way to add a video from YouTube is to use the embed code. This technique allows you to customize video's attributes by using the YouTube API parameters.
To insert a video using an embed code, follow the steps below:
- Go to YouTube and find the desired video. Click on Share → Embed underneath the video and copy the whole string.
- Open your presentation and select the slide. Go to Insert and click Video → Online Video.
- Insert the code into the From a Video Embed Code field. Then click on Insert or press Enter.
QuickTip: Before you place the video onto the slide, you can add some parameters into the code.
For example, add autoplay=1 to make the video start automatically.

This video will be played automatically after opening the slide it's placed on. The first parameter should be added into the code with "?". Each following parameter needs to be separated from the previous one with "&".
The following parameter will make the video start from 1:20 and stop at 1:40. Also, the Related Videos screen will not be shown after the video ends: ?start=80&end=100&rel=0

You can read more about the available YouTube API parameters here.
- More control over the video playback and appearance with the help of parameters.
- Takes more time than inserting with a link. Requires viewers to have an Internet connection.
3. Use the YouTube feature
iSpring authoring tools (Suite, Presenter and Converter Pro) have the YouTube option on their ribbons. It only takes two mouse clicks to insert a video, and that makes a huge difference from PowerPoint 2007 that doesn't have a built-in YouTube feature.
To insert a video from YouTube into PPT using iSpring, do the following:
- Copy the link to the desired video in the address bar of your internet browser.
- Open PowerPoint and select the slide to insert the video onto.
- Go to the iSpring ribbon and click on YouTube.
- Paste the link into the opened window.
To check how the video looks before inserting it, click on Preview.
- Click on OK to insert the video.
When you insert the video and adjust its size, the slide will look like this:
To check how the slide will look like in the slideshow mode, click on Preview on the ribbon and select Preview Selected Slides.
- Easy, fast, works with PowerPoint 2007.
- Requires viewers to have an Internet connection.
4. Insert as a Web Object
There's an option in iSpring that allows you to insert web pages right onto PowerPoint slides. It's called Web Object and it can also be used for embed codes (note: requires an Internet connection to be viewed).
- Go to YouTube and find the video that you want to insert into your presentation. Click on Share → Embed and copy the link within the quotes
- Open PowerPoint, select a slide in your presentation and go to the iSpring ribbon. Click on Web Object.
- Insert the copied link into the address bar of the opened window. Click Preview to watch the video before you insert it. Then, click on OK.
When you insert the video, the web object will appear on the slide, and you can adjust its size:
You can watch the video by using the Preview option on the iSpring ribbon.
Same as with PowerPoint embed code, you can add YouTube API parameters to the link to customize the video playback.
For example:
- To hide the YouTube control bar: controls=0.
- To loop video: loop=1.
- To start playback automatically: autoplay=1
Here is how the result will look like:
- More control over the video playback and appearance with the help of parameters.
- Takes more time than inserting with a link. Video will be displayed in iSpring preview, but not PowerPoint SlideShow. Requires an Internet connection to be viewed.
5. Screen capture a YouTube video
While all the above tips require viewers to have an Internet connection, you can make your presentation internet independent by inserting a video from your computer.
To record your YouTube video, download iSpring Free Cam as a stand-alone program or use iSpring Cam as a component of iSpring Suite.
- Copy the link within the quotes from the embed code on YouTube.
- Open a blank tab in your Internet browser and paste the link into the address bar. To make the capturing process easier, you can hide most of the YouTube player elements from the video frame. To remove the video title and the player controls from the frame, add ?controls=0&showinfo=0 to the link. Next, press Enter:
- Let's move to the screen capturing part. Run iSpring Cam or iSpring Free Cam using a shortcut on your desktop or find the application in the list of the installed programs. Click on New Recording.
- Open your Internet browser and adjust the capturing frame to the size of the video.
Click on Settings (the gear icon) and make sure that Record system sounds is selected.To prohibit microphone recording, unselect the Microphone checkbox.
- Click on the red button to start recording. The app will show a 3-second countdown before it starts capturing the video.
- After you've captured the video, click on Done or press the stop key on your keyboard (Esc by default. You can change the assigned key in the iSpring Free Cam settings).
- After a preview of the recording has been created, you can edit the video by clicking on Edit. You can read more about the iSpring Audio/Video Editor here.
- After you've finished polishing the video, click on Save as Video.
Locate the folder where you would like to save the video file.
- Now open your PowerPoint presentation and insert the file as a local video.
- Video can be played in offline mode.
- The quality of the captured video is worse than the original version, and requires more time compared to other techniques (time required depends on the duration of the video that you would like to capture).
How to choose the best method
Even if you haven't made it to the end of the instructions, take a look at this chart. It compares the pros and cons of all the five described methods, so that you can choose the best one according to your needs.
|YouTube, PowerPoint
|Embed, PowerPoint
|YouTube, iSpring
|Web Object, iSpring
|iSpring Cam capture
Video quality (compared to original)
Allows appearance and playback customization
Can be played when offline
There's more than one way to insert a YouTube video into a PowerPoint presentation. Each of them differs in terms of requested time, playback options, and other factors. The fastest solution is to go for the YouTube feature. If you want to customize the video playback, stick to Web Object or Embed Code. Finally, if your task is capturing an online video and inserting it into an presentation that will be played offline, try recording it with iSpring Cam.
iSpring Suite 8.7
Fully-stocked e-Learning authoring toolkit for PowerPoint. No training required to start!


text:
Your "New York Times" Review: $399
Amazon.com's new POD division, BookSurge.com, offers DIY authors a menu of services that make the early days of self-publishing ("Where do you want us to put these boxes of books, sir?") look like the Dark Ages. But in Slate's Hot Document column, Bonnie Goldstein discusses an a la carte item that goes Kirkus Reviews' Kirkus Discoveries one better: a "New York Times Review":
The most interesting add-on BookSurge offers is, for $399, a personally crafted review written by "New York Times bestselling author, Ellen Tanner Marsh." (Ellen Tanner Marsh's bodice-rippers Reap the Savage Wind and Wrap Me in Splendor graced the New York Times trade- paperback bestseller list in 1982 and 1983.) Not surprisingly, many BookSurge titles boast enthusiastic reviews by Marsh.
As this Hot Document discovers, Ms. Marsh is refreshingly free of the blindered solipsism that causes so many reviewers to listen only to their guts:
Unlike most book reviewers, Marsh is receptive to input from authors. If you click onto the next page, you'll see an e-mail that BookSurge LLC's editorial services coordinator, Thomas Kephart, wrote Bowman regarding his "New York Times Review." Quoth Kephart: "Ms. Marsh agreed that your suggestions were more descriptive, therefore she used your wording to make the changes you desired." Kephart's e-mail makes that other New York Times reviewer, Michiko Kakutani, seem, in comparison, downright stuck-up.
Strangely, references to this service, including the direct link, have been removed from BookSurge.com since this new wrinkle came to light. Perhaps they're simply updating the pricing schedule–$399 for the first draft of the review, $99 for each round of the book author's revisions?


text:
Hey guys I am trying to program a calculator with JButtons and since a calculator has a lot of buttons I created them in an array called :
Then in this loop where I create them i add an action listener to each value. Here is the whole loop:
So here comes the problem. When i write this for each array value to get an action depending on which button I pressed it always activates all the if clauses. So whenI press Button 1 it will run operators.buttonNumbers(0), but also operators.buttonNumbers(1).
Does anyone know how I can prevent this from happening so it doesnt activate all the if statements?
Thanks for your help
Add Action Listener to JButton Array
|Jonas Meise · March 27, 2015
Post a Reply
|Oldest Newest Rating
Branislav Lazic
· March 27, 2015
You are encountering this issue because you are adding one same ActionListener to all buttons. ActionEvent ae is same for every button.
When you ask ActionEvent ae: "Is button[0] source of ae ActionEvent the answer will be yes!"
If you ask: "Is button[1] source of ae ActionEvent the answer will be the same!"
Solution: Upon each iteration of your "for" loop add new instance of ActionListener to each button.
Jonas Meise
· March 28, 2015
Hmm I get the reason why it doesn't work but since I'm quite new to java I'm not sure what you mean with your solution. How would I add this instance in my code
Branislav Lazic
· March 28, 2015
I shown you already.
Instead of passing anonymous inner class, in Java 8 you can pass lambda expression in your addActionListener method.
Jonas Meise
· March 28, 2015
Oh okay crap I have java 7 because I had a minecraft server guess I'll update to 8 then xP
thanks buddy
Jonas Meise
· March 29, 2015
Hmm Okay I've installed Java 8 and used the Lambda expression as you said so now when I click a button the method I call only gets called once. But somehow I don't get it to work that with a different button a different action happens now. I tried to call the method operators.buttonNumbers(i) with the variable i so it would be a different value for I depending on what button I press. The outcome altough is always 16. What am I doing wrong? Here is the code:
- 1
Java / Android Development
126,608 followers
Very popular language used to create desktop applications, website applets, and Android apps.
- Official Forum Rules
- Android App Development Tutorials
- Java (Beginner) Tutorials
- Java (Intermediate) Tutorials
- Useful frameworks, libraries, etc...
|Bucky Roberts Administrator


text:
Willys Utility Wagon for Sale
Viewing 1 - 4 of 4 results
Selected Filters:Type of Ad: Vehicles for Sale Make: Willys Model: Utility Wagon Remove All
1950 Willys Utility Wagon Delivery
Grand Rapids, MI
Here is something you do not see every day. We are pleased to present this very cool, 1950 Willy's Sedan Delivery Custom for your... More
Offered By: GR Auto Gallery
Advertiser since 2009
Advertiser since 2009
1962 Willys Utility Wagon
Metamora, MI
1962 Willys Utility 4X4 Wagon with "Tornado" straight 6 Hemi. Classic original sport utility vehicle. Everything is original except for updated brakes, windshield wipers... More
Offered By: Private Seller
1949 Willys Utility Wagon Station Wagon
Alabaster, AL
Offered for sale is a 1949 Jeep Willys Woody Wagon. It has the original 4 cylinder engine with a 3 speed on the column... More
Offered By: Leaded Gas Classics
Advertiser since 2013
Advertiser since 2013
1955 Willys Utility Wagon
Lake Forest, IL
Stunning 1955 Willys Utility Wagon. The chrome and stainless were redone as well as a new two tone paint. The interior is original and... More
Offered By: Private Seller


text:
It really seems like yesterday that Simba Mhere burst on to our television screens as SA's latest hotshot presenter.
The man was the winner of the Top Billing national presenter search. He came from nowhere and charmed the judges with his confidence and infectious personality.
Now, just over two years later, the show is back at it again, in search of yet another addition to their team, and Mhere is on the road with them helping search for a screen partner.
It was him in those long queues not so long ago and so it is interesting that he is now playing Ryan Seacrest in this process.
"I know people think that it has been a year since I joined the crew, but it has been two," said Mhere.
"This is not an annual showcase. Top Billing decides when they feel they need a new addition and they go on the road to look for the person. I am just glad that this time I am on the other side of the fence," he said.
Even though it is more than 24 months later, Mhere remembers his audition as if it was yesterday.
"I auditioned in Johannesburg and it was really hectic. The first day I went it was so full I decided to go back. I came back later and slept in my car so that I would become one of the first to audition. I figured if I came to the judges looking fresh I would be able to appear presentable and also do justice to my act."
And just as he planned when his turn came, it was in the morning and he gave the audition his best shot. He even went a little over the top at the end, but he feels that was when he sealed the deal.
"I was done with my rehearsed piece when I decided to pull a stunt that would separate me from the rest. I asked them when I was done whether I was expected to take my top off.
"They laughed and I walked up to them and flexed a bicep, then looked into the camera and said, 'See guys, size does count'.
"They chatted me up 10 to 15 minutes after that and I am sure it made the others outside really nervous," he reflected.
Now that he is on the road with the same people who scouted him, Mhere has some words of advice to the would-be contenders.
"It is very simple. Make them remember you. I asked them when we were in the top 14 why they chose me and they said it was because they remembered me," he said.
* The auditions have already been to Bloemfontein and Durban. They will be in Port Elizabeth on May 24 and 25, Polokwane on May 28, Cape Town on June 1 and finally in Johannesburg from June 8 to 11.


text:
MADS Korneliussen is looking forward to a rare outing for his parent club this evening as he prepares to guest for Swindon at Belle Vue.
The Dane represented the Robins for three spells between 2006 and 2010 and comes into Alun Rossiter's side tonight in the absence of skipper Troy Batchelor who is on his way back to Britain following his appearance in Saturday's New Zealand Grand Prix.
Korneliussen hasn't represented the Robins since his final spell in the club's team, although he has ridden in a number of individual events including the Bob Kilby Memorial, and is looking forward to playing his part at Kirky Lane.
"I can't remember the last time I rode for Swindon to be honest but I don't think I've guested for them or anything since I was last in the team so it will be good to be back," he said.
"It's nice to be able to help them out but also get some extra time on the bike too and, although it's not one of my favourite tracks, I always seem to go quite well around Belle Vue. Hopefully it will be the same again because I'm really looking forward to it.
"Swindon have a good team, an exciting team, although it's sad they've lost a reserve already. I'm looking forward to being in the team and it should be a good laugh.
"I have some good memories of Swindon and it seems like the club is really progressing now which is good to see as it's looking bright."
Leicester lost their third straight meeting at the start of the season following their 52-37 defeat to Eastbourne on Saturday but Korneliussen insisted there is still plenty of time for the Lions to get things right.
"It's early doors yet and we've lost all of our official meetings so far but it's a fun team and we all have fun together," he said.
"There is a great team spirit and the track's not too bad so I can't complain about it really."


text:
It's the 4th day after botox, my lines are visible and my crowfeet are also there. Will my forehead improve?
Doctor Answers 11
Botox Improvement
It takes 2 weeks to see the full result with Botox
Botox can take 1-2 weeks to see effects
You might also like...
It's the 4th day after botox, my lines are visible and my crowfeet are also there. Will my forehead improve?
Learn more: http://www.shapiroplasticsurgery.com/blog/what-to-expect-when-you-get-botox-injections
Botox results are not immediate
4 days after Botox treatment
Botox Not Working
It is interesting that some patients may have a different response from time to time with the same amount of Botox to the same area by the same doctor.
Botox results
Botox results
It usually takes 1-2 weeks before you see the full effect of your botox injections. Give it some more time. It this is your first time going to that doctor it takes a while before they know how many units you need and where to inject.
Learn more: http://www.raoplasticsurgery.com/medical-spa/botox
Botox results take up to 10 days
"This answer has been solicited without seeing this patient and cannot be held as true medical advice, but only opinion. Seek in-person treatment with a trained medical professional for appropriate care."
These answers are for educational purposes and should not be relied upon as a substitute for medical advice you may receive from your physician. If you have a medical emergency, please call 911. These answers do not constitute or initiate a patient/doctor relationship.