text:
The procedures described thus far let you define new types, new functions, and new operators. However, we cannot yet define an index on a column of a new data type. To do this, we must define an operator class for the new data type. Later in this section, we will illustrate this concept in an example: a new operator class for the B-tree index method that stores and sorts complex numbers in ascending absolute value order.
Operator classes can be grouped into operator families to show the relationships between semantically compatible classes. When only a single data type is involved, an operator class is sufficient, so we'll focus on that case first and then return to operator families.
pg_am table contains one row for every index method (internally known as access method). Support for regular access to tables is built into PostgreSQL, but all index methods are described in
pg_am. It is possible to add a new index access method by writing the necessary code and then creating an entry in
pg_am — but that is beyond the scope of this chapter (see Chapter 64).
The routines for an index method do not directly know anything about the data types that the index method will operate on. Instead, an operator class identifies the set of operations that the index method needs to use to work with a particular data type. Operator classes are so called because one thing they specify is the set of
WHERE-clause operators that can be used with an index (i.e., can be converted into an index-scan qualification). An operator class can also specify some support function that are needed by the internal operations of the index method, but do not directly correspond to any
WHERE-clause operator that can be used with the index.
It is possible to define multiple operator classes for the same data type and index method. By doing this, multiple sets of indexing semantics can be defined for a single data type. For example, a B-tree index requires a sort ordering to be defined for each data type it works on. It might be useful for a complex-number data type to have one B-tree operator class that sorts the data by complex absolute value, another that sorts by real part, and so on. Typically, one of the operator classes will be deemed most commonly useful and will be marked as the default operator class for that data type and index method.
The same operator class name can be used for several different index methods (for example, both B-tree and hash index methods have operator classes named
int4_ops), but each such class is an independent entity and must be defined separately.
The operators associated with an operator class are identified by "strategy numbers", which serve to identify the semantics of each operator within the context of its operator class. For example, B-trees impose a strict ordering on keys, lesser to greater, and so operators like "less than" and "greater than or equal to" are interesting with respect to a B-tree. Because PostgreSQL allows the user to define operators, PostgreSQL cannot look at the name of an operator (e.g.,
< or
>=) and tell what kind of comparison it is. Instead, the index method defines a set of "strategies", which can be thought of as generalized operators. Each operator class specifies which actual operator corresponds to each strategy for a particular data type and interpretation of the index semantics.
The B-tree index method defines five strategies, shown in Table 38.3.
Table 38.3. B-Tree Strategies
|Strategy Number
|less than
|less than or equal
|greater than or equal
|greater than
Hash indexes support only equality comparisons, and so they use only one strategy, shown in Table 38.4.
Table 38.4. Hash Strategies
|Strategy Number
GiST indexes are more flexible: they do not have a fixed set of strategies at all. Instead, the "consistency" support routine of each particular GiST operator class interprets the strategy numbers however it likes. As an example, several of the built-in GiST index operator classes index two-dimensional geometric objects, providing the "R-tree" strategies shown in Table 38.5. Four of these are true two-dimensional tests (overlaps, same, contains, contained by); four of them consider only the X direction; and the other four provide the same tests in the Y direction.
Table 38.5. GiST Two-Dimensional "R-tree" Strategies
|Strategy Number
|strictly left of
|does not extend to right of
|does not extend to left of
|strictly right of
|contained by
|does not extend above
|strictly below
|strictly above
|does not extend below
SP-GiST indexes are similar to GiST indexes in flexibility: they don't have a fixed set of strategies. Instead the support routines of each operator class interpret the strategy numbers according to the operator class's definition. As an example, the strategy numbers used by the built-in operator classes for points are shown in Table 38.6.
Table 38.6. SP-GiST Point Strategies
|Strategy Number
|strictly left of
|strictly right of
|contained by
|strictly below
|strictly above
GIN indexes are similar to GiST and SP-GiST indexes, in that they don't have a fixed set of strategies either. Instead the support routines of each operator class interpret the strategy numbers according to the operator class's definition. As an example, the strategy numbers used by the built-in operator class for arrays are shown in Table 38.7.
Table 38.7. GIN Array Strategies
|Strategy Number
|is contained by
BRIN indexes are similar to GiST, SP-GiST and GIN indexes in that they don't have a fixed set of strategies either. Instead the support routines of each operator class interpret the strategy numbers according to the operator class's definition. As an example, the strategy numbers used by the built-in
Minmax operator classes are shown in Table 38.8.
Table 38.8. BRIN Minmax Strategies
|Strategy Number
|less than
|less than or equal
|greater than or equal
|greater than
Notice that all the operators listed above return Boolean values. In practice, all operators defined as index method search operators must return type
boolean, since they must appear at the top level of a
WHERE clause to be used with an index. (Some index access methods also support ordering operators, which typically don't return Boolean values; that feature is discussed in Section 38.16.7.)
Strategies aren't usually enough information for the system to figure out how to use an index. In practice, the index methods require additional support routines in order to work. For example, the B-tree index method must be able to compare two keys and determine whether one is greater than, equal to, or less than the other. Similarly, the hash index method must be able to compute hash codes for key values. These operations do not correspond to operators used in qualifications in SQL commands; they are administrative routines used by the index methods, internally.
Just as with strategies, the operator class identifies which specific functions should play each of these roles for a given data type and semantic interpretation. The index method defines the set of functions it needs, and the operator class identifies the correct functions to use by assigning them to the "support function numbers" specified by the index method.
Additionally, some opclasses allow users to specify parameters which control their behavior. Each builtin index access method has an optional
options support function, which defines a set of opclass-specific parameters.
B-trees require a comparison support function, and allow four additional support functions to be supplied at the operator class author's option, as shown in Table 38.9. The requirements for these support functions are explained further in Section 67.3.
Table 38.9. B-Tree Support Functions
|Support Number
|Compare two keys and return an integer less than zero, zero, or greater than zero, indicating whether the first key is less than, equal to, or greater than the second
|Return the addresses of C-callable sort support function(s) (optional)
|Compare a test value to a base value plus/minus an offset, and return true or false according to the comparison result (optional)
|Determine if it is safe for indexes that use the operator class to apply the btree deduplication optimization (optional)
|Define options that are specific to this operator class (optional)
Hash indexes require one support function, and allow two additional ones to be supplied at the operator class author's option, as shown in Table 38.10.
Table 38.10. Hash Support Functions
|Support Number
|Compute the 32-bit hash value for a key
|Compute the 64-bit hash value for a key given a 64-bit salt; if the salt is 0, the low 32 bits of the result must match the value that would have been computed by function 1 (optional)
|Define options that are specific to this operator class (optional)
GiST indexes have eleven support functions, six of which are optional, as shown in Table 38.11. (For more information see Chapter 68.)
Table 38.11. GiST Support Functions
|Support Number
|determine whether key satisfies the query qualifier
|compute union of a set of keys
|compute a compressed representation of a key or value to be indexed (optional)
|compute a decompressed representation of a compressed key (optional)
|compute penalty for inserting new key into subtree with given subtree's key
|determine which entries of a page are to be moved to the new page and compute the union keys for resulting pages
|compare two keys and return true if they are equal
|determine distance from key to query value (optional)
|compute original representation of a compressed key for index-only scans (optional)
|define options that are specific to this operator class (optional)
|provide a sort comparator to be used in fast index builds (optional)
SP-GiST indexes have six support functions, one of which is optional, as shown in Table 38.12. (For more information see Chapter 69.)
Table 38.12. SP-GiST Support Functions
|Support Number
|provide basic information about the operator class
|determine how to insert a new value into an inner tuple
|determine how to partition a set of values
|determine which sub-partitions need to be searched for a query
|determine whether key satisfies the query qualifier
|define options that are specific to this operator class (optional)
GIN indexes have seven support functions, four of which are optional, as shown in Table 38.13. (For more information see Chapter 70.)
Table 38.13. GIN Support Functions
|Support Number
|compare two keys and return an integer less than zero, zero, or greater than zero, indicating whether the first key is less than, equal to, or greater than the second
|extract keys from a value to be indexed
|extract keys from a query condition
|determine whether value matches query condition (Boolean variant) (optional if support function 6 is present)
|compare partial key from query and key from index, and return an integer less than zero, zero, or greater than zero, indicating whether GIN should ignore this index entry, treat the entry as a match, or stop the index scan (optional)
|determine whether value matches query condition (ternary variant) (optional if support function 4 is present)
|define options that are specific to this operator class (optional)
BRIN indexes have five basic support functions, one of which is optional, as shown in Table 38.14. Some versions of the basic functions require additional support functions to be provided. (For more information see Section 71.3.)
Table 38.14. BRIN Support Functions
|Support Number
|return internal information describing the indexed columns' summary data
|add a new value to an existing summary index tuple
|determine whether value matches query condition
|compute union of two summary tuples
|define options that are specific to this operator class (optional)
Unlike search operators, support functions return whichever data type the particular index method expects; for example in the case of the comparison function for B-trees, a signed integer. The number and types of the arguments to each support function are likewise dependent on the index method. For B-tree and hash the comparison and hashing support functions take the same input data types as do the operators included in the operator class, but this is not the case for most GiST, SP-GiST, GIN, and BRIN support functions.
Now that we have seen the ideas, here is the promised example of creating a new operator class. (You can find a working copy of this example in
src/tutorial/complex.c and
src/tutorial/complex.sql in the source distribution.) The operator class encapsulates operators that sort complex numbers in absolute value order, so we choose the name
complex_abs_ops. First, we need a set of operators. The procedure for defining operators was discussed in Section 38.14. For an operator class on B-trees, the operators we require are:
The least error-prone way to define a related set of comparison operators is to write the B-tree comparison support function first, and then write the other functions as one-line wrappers around the support function. This reduces the odds of getting inconsistent results for corner cases. Following this approach, we first write:
#define Mag(c) ((c)->x*(c)->x + (c)->y*(c)->y) static int complex_abs_cmp_internal(Complex *a, Complex *b) { double amag = Mag(a), bmag = Mag(b); if (amag < bmag) return -1; if (amag > bmag) return 1; return 0; }
Now the less-than function looks like:
PG_FUNCTION_INFO_V1(complex_abs_lt); Datum complex_abs_lt(PG_FUNCTION_ARGS) { Complex *a = (Complex *) PG_GETARG_POINTER(0); Complex *b = (Complex *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(complex_abs_cmp_internal(a, b) < 0); }
The other four functions differ only in how they compare the internal function's result to zero.
Next we declare the functions and the operators based on the functions to SQL:
CREATE FUNCTION complex_abs_lt(complex, complex) RETURNS bool
filename', 'complex_abs_lt'
leftarg = complex, rightarg = complex, procedure = complex_abs_lt,
commutator = > , negator = >= ,
restrict = scalarltsel, join = scalarltjoinsel
It is important to specify the correct commutator and negator operators, as well as suitable restriction and join selectivity functions, otherwise the optimizer will be unable to make effective use of the index.
Other things worth noting are happening here:
There can only be one operator named, say,
= and taking type
complex for both operands. In this case we don't have any other operator
= for
complex, but if we were building a practical data type we'd probably want
= to be the ordinary equality operation for complex numbers (and not the equality of the absolute values). In that case, we'd need to use some other operator name for
Although PostgreSQL can cope with functions having the same SQL name as long as they have different argument data types, C can only cope with one global function having a given name. So we shouldn't name the C function something simple like
abs_eq. Usually it's a good practice to include the data type name in the C function name, so as not to conflict with functions for other data types.
We could have made the SQL name of the function
abs_eq, relying on PostgreSQL to distinguish it by argument data types from any other SQL function of the same name. To keep the example simple, we make the function have the same names at the C level and SQL level.
The next step is the registration of the support routine required by B-trees. The example C code that implements this is in the same file that contains the operator functions. This is how we declare the function:
CREATE FUNCTION complex_abs_cmp(complex, complex)
RETURNS integer
Now that we have the required operators and support routine, we can finally create the operator class:
CREATE OPERATOR CLASS complex_abs_ops DEFAULT FOR TYPE complex USING btree AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 complex_abs_cmp(complex, complex);
And we're done! It should now be possible to create and use B-tree indexes on
complex columns.
We could have written the operator entries more verbosely, as in:
OPERATOR 1 < (complex, complex) ,
but there is no need to do so when the operators take the same data type we are defining the operator class for.
The above example assumes that you want to make this new operator class the default B-tree operator class for the
complex data type. If you don't, just leave out the word
So far we have implicitly assumed that an operator class deals with only one data type. While there certainly can be only one data type in a particular index column, it is often useful to index operations that compare an indexed column to a value of a different data type. Also, if there is use for a cross-data-type operator in connection with an operator class, it is often the case that the other data type has a related operator class of its own. It is helpful to make the connections between related classes explicit, because this can aid the planner in optimizing SQL queries (particularly for B-tree operator classes, since the planner contains a great deal of knowledge about how to work with them).
To handle these needs, PostgreSQL uses the concept of an operator family. An operator family contains one or more operator classes, and can also contain indexable operators and corresponding support functions that belong to the family as a whole but not to any single class within the family. We say that such operators and functions are "loose" within the family, as opposed to being bound into a specific class. Typically each operator class contains single-data-type operators while cross-data-type operators are loose in the family.
All the operators and functions in an operator family must have compatible semantics, where the compatibility requirements are set by the index method. You might therefore wonder why bother to single out particular subsets of the family as operator classes; and indeed for many purposes the class divisions are irrelevant and the family is the only interesting grouping. The reason for defining operator classes is that they specify how much of the family is needed to support any particular index. If there is an index using an operator class, then that operator class cannot be dropped without dropping the index — but other parts of the operator family, namely other operator classes and loose operators, could be dropped. Thus, an operator class should be specified to contain the minimum set of operators and functions that are reasonably needed to work with an index on a specific data type, and then related but non-essential operators can be added as loose members of the operator family.
As an example, PostgreSQL has a built-in B-tree operator family
integer_ops, which includes operator classes
int4_ops, and
int2_ops for indexes on
bigint (
integer (
int4), and
smallint (
int2) columns respectively. The family also contains cross-data-type comparison operators allowing any two of these types to be compared, so that an index on one of these types can be searched using a comparison value of another type. The family could be duplicated by these definitions:
CREATE OPERATOR FAMILY integer_ops USING btree; CREATE OPERATOR CLASS int8_ops DEFAULT FOR TYPE int8 USING btree FAMILY integer_ops AS -- standard int8 comparisons OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 btint8cmp(int8, int8) , FUNCTION 2 btint8sortsupport(internal) , FUNCTION 3 in_range(int8, int8, int8, boolean, boolean) , FUNCTION 4 btequalimage(oid) ; CREATE OPERATOR CLASS int4_ops DEFAULT FOR TYPE int4 USING btree FAMILY integer_ops AS -- standard int4 comparisons OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 btint4cmp(int4, int4) , FUNCTION 2 btint4sortsupport(internal) , FUNCTION 3 in_range(int4, int4, int4, boolean, boolean) , FUNCTION 4 btequalimage(oid) ; CREATE OPERATOR CLASS int2_ops DEFAULT FOR TYPE int2 USING btree FAMILY integer_ops AS -- standard int2 comparisons OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 btint2cmp(int2, int2) , FUNCTION 2 btint2sortsupport(internal) , FUNCTION 3 in_range(int2, int2, int2, boolean, boolean) , FUNCTION 4 btequalimage(oid) ; ALTER OPERATOR FAMILY integer_ops USING btree ADD -- cross-type comparisons int8 vs int2 OPERATOR 1 < (int8, int2) , OPERATOR 2 <= (int8, int2) , OPERATOR 3 = (int8, int2) , OPERATOR 4 >= (int8, int2) , OPERATOR 5 > (int8, int2) , FUNCTION 1 btint82cmp(int8, int2) , -- cross-type comparisons int8 vs int4 OPERATOR 1 < (int8, int4) , OPERATOR 2 <= (int8, int4) , OPERATOR 3 = (int8, int4) , OPERATOR 4 >= (int8, int4) , OPERATOR 5 > (int8, int4) , FUNCTION 1 btint84cmp(int8, int4) , -- cross-type comparisons int4 vs int2 OPERATOR 1 < (int4, int2) , OPERATOR 2 <= (int4, int2) , OPERATOR 3 = (int4, int2) , OPERATOR 4 >= (int4, int2) , OPERATOR 5 > (int4, int2) , FUNCTION 1 btint42cmp(int4, int2) , -- cross-type comparisons int4 vs int8 OPERATOR 1 < (int4, int8) , OPERATOR 2 <= (int4, int8) , OPERATOR 3 = (int4, int8) , OPERATOR 4 >= (int4, int8) , OPERATOR 5 > (int4, int8) , FUNCTION 1 btint48cmp(int4, int8) , -- cross-type comparisons int2 vs int8 OPERATOR 1 < (int2, int8) , OPERATOR 2 <= (int2, int8) , OPERATOR 3 = (int2, int8) , OPERATOR 4 >= (int2, int8) , OPERATOR 5 > (int2, int8) , FUNCTION 1 btint28cmp(int2, int8) , -- cross-type comparisons int2 vs int4 OPERATOR 1 < (int2, int4) , OPERATOR 2 <= (int2, int4) , OPERATOR 3 = (int2, int4) , OPERATOR 4 >= (int2, int4) , OPERATOR 5 > (int2, int4) , FUNCTION 1 btint24cmp(int2, int4) , -- cross-type in_range functions FUNCTION 3 in_range(int4, int4, int8, boolean, boolean) , FUNCTION 3 in_range(int4, int4, int2, boolean, boolean) , FUNCTION 3 in_range(int2, int2, int8, boolean, boolean) , FUNCTION 3 in_range(int2, int2, int4, boolean, boolean) ;
Notice that this definition "overloads" the operator strategy and support function numbers: each number occurs multiple times within the family. This is allowed so long as each instance of a particular number has distinct input data types. The instances that have both input types equal to an operator class's input type are the primary operators and support functions for that operator class, and in most cases should be declared as part of the operator class rather than as loose members of the family.
In a B-tree operator family, all the operators in the family must sort compatibly, as is specified in detail in Section 67.2. For each operator in the family there must be a support function having the same two input data types as the operator. It is recommended that a family be complete, i.e., for each combination of data types, all operators are included. Each operator class should include just the non-cross-type operators and support function for its data type.
To build a multiple-data-type hash operator family, compatible hash support functions must be created for each data type supported by the family. Here compatibility means that the functions are guaranteed to return the same hash code for any two values that are considered equal by the family's equality operators, even when the values are of different types. This is usually difficult to accomplish when the types have different physical representations, but it can be done in some cases. Furthermore, casting a value from one data type represented in the operator family to another data type also represented in the operator family via an implicit or binary coercion cast must not change the computed hash value. Notice that there is only one support function per data type, not one per equality operator. It is recommended that a family be complete, i.e., provide an equality operator for each combination of data types. Each operator class should include just the non-cross-type equality operator and the support function for its data type.
GiST, SP-GiST, and GIN indexes do not have any explicit notion of cross-data-type operations. The set of operators supported is just whatever the primary support functions for a given operator class can handle.
In BRIN, the requirements depends on the framework that provides the operator classes. For operator classes based on
minmax, the behavior required is the same as for B-tree operator families: all the operators in the family must sort compatibly, and casts must not change the associated sort ordering.
Prior to PostgreSQL 8.3, there was no concept of operator families, and so any cross-data-type operators intended to be used with an index had to be bound directly into the index's operator class. While this approach still works, it is deprecated because it makes an index's dependencies too broad, and because the planner can handle cross-data-type comparisons more effectively when both data types have operators in the same operator family.
PostgreSQL uses operator classes to infer the properties of operators in more ways than just whether they can be used with indexes. Therefore, you might want to create operator classes even if you have no intention of indexing any columns of your data type.
In particular, there are SQL features such as
ORDER BY and
DISTINCT that require comparison and sorting of values. To implement these features on a user-defined data type, PostgreSQL looks for the default B-tree operator class for the data type. The "equals" member of this operator class defines the system's notion of equality of values for
GROUP BY and
DISTINCT, and the sort ordering imposed by the operator class defines the default
ORDER BY ordering.
If there is no default B-tree operator class for a data type, the system will look for a default hash operator class. But since that kind of operator class only provides equality, it is only able to support grouping not sorting.
When there is no default operator class for a data type, you will get errors like "could not identify an ordering operator" if you try to use these SQL features with the data type.
In PostgreSQL versions before 7.4, sorting and grouping operations would implicitly use operators named
<, and
>. The new behavior of relying on default operator classes avoids having to make any assumption about the behavior of operators with particular names.
Sorting by a non-default B-tree operator class is possible by specifying the class's less-than operator in a
USING option, for example
SELECT * FROM mytable ORDER BY somecol USING ~<~;
Alternatively, specifying the class's greater-than operator in
USING selects a descending-order sort.
Comparison of arrays of a user-defined type also relies on the semantics defined by the type's default B-tree operator class. If there is no default B-tree operator class, but there is a default hash operator class, then array equality is supported, but not ordering comparisons.
Another SQL feature that requires even more data-type-specific knowledge is the
FOLLOWING framing option for window functions (see Section 4.2.8). For a query such as
SELECT sum(x) OVER (ORDER BY x RANGE BETWEEN 5 PRECEDING AND 10 FOLLOWING) FROM mytable;
it is not sufficient to know how to order by
x; the database must also understand how to "subtract 5" or "add 10" to the current row's value of
x to identify the bounds of the current window frame. Comparing the resulting bounds to other rows' values of
x is possible using the comparison operators provided by the B-tree operator class that defines the
ORDER BY ordering — but addition and subtraction operators are not part of the operator class, so which ones should be used? Hard-wiring that choice would be undesirable, because different sort orders (different B-tree operator classes) might need different behavior. Therefore, a B-tree operator class can specify an in_range support function that encapsulates the addition and subtraction behaviors that make sense for its sort order. It can even provide more than one in_range support function, in case there is more than one data type that makes sense to use as the offset in
RANGE clauses. If the B-tree operator class associated with the window's
ORDER BY clause does not have a matching in_range support function, the
FOLLOWING option is not supported.
Another important point is that an equality operator that appears in a hash operator family is a candidate for hash joins, hash aggregation, and related optimizations. The hash operator family is essential here since it identifies the hash function(s) to use.
Some index access methods (currently, only GiST and SP-GiST) support the concept of ordering operators. What we have been discussing so far are search operators. A search operator is one for which the index can be searched to find all rows satisfying
constant. Note that nothing is promised about the order in which the matching rows will be returned. In contrast, an ordering operator does not restrict the set of rows that can be returned, but instead determines their order. An ordering operator is one for which the index can be scanned to return rows in the order represented by
constant. The reason for defining ordering operators that way is that it supports nearest-neighbor searches, if the operator is one that measures distance. For example, a query like
SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
finds the ten places closest to a given target point. A GiST index on the location column can do this efficiently because
<-> is an ordering operator.
While search operators have to return Boolean results, ordering operators usually return some other type, such as float or numeric for distances. This type is normally not the same as the data type being indexed. To avoid hard-wiring assumptions about the behavior of different data types, the definition of an ordering operator is required to name a B-tree operator family that specifies the sort ordering of the result data type. As was stated in the previous section, B-tree operator families define PostgreSQL's notion of ordering, so this is a natural representation. Since the point
<-> operator returns
float8, it could be specified in an operator class creation command like this:
OPERATOR 15 <-> (point, point) FOR ORDER BY float_ops
float_ops is the built-in operator family that includes operations on
float8. This declaration states that the index is able to return rows in order of increasing values of the
<-> operator.
There are two special features of operator classes that we have not discussed yet, mainly because they are not useful with the most commonly used index methods.
Normally, declaring an operator as a member of an operator class (or family) means that the index method can retrieve exactly the set of rows that satisfy a
WHERE condition using the operator. For example:
SELECT * FROM table WHERE integer_column < 4;
can be satisfied exactly by a B-tree index on the integer column. But there are cases where an index is useful as an inexact guide to the matching rows. For example, if a GiST index stores only bounding boxes for geometric objects, then it cannot exactly satisfy a
WHERE condition that tests overlap between nonrectangular objects such as polygons. Yet we could use the index to find objects whose bounding box overlaps the bounding box of the target object, and then do the exact overlap test only on the objects found by the index. If this scenario applies, the index is said to be "lossy" for the operator. Lossy index searches are implemented by having the index method return a recheck flag when a row might or might not really satisfy the query condition. The core system will then test the original query condition on the retrieved row to see whether it should be returned as a valid match. This approach works if the index is guaranteed to return all the required rows, plus perhaps some additional rows, which can be eliminated by performing the original operator invocation. The index methods that support lossy searches (currently, GiST, SP-GiST and GIN) allow the support functions of individual operator classes to set the recheck flag, and so this is essentially an operator-class feature.
Consider again the situation where we are storing in the index only the bounding box of a complex object such as a polygon. In this case there's not much value in storing the whole polygon in the index entry — we might as well store just a simpler object of type
box. This situation is expressed by the
STORAGE option in
CREATE OPERATOR CLASS: we'd write something like:
CREATE OPERATOR CLASS polygon_ops DEFAULT FOR TYPE polygon USING gist AS ... STORAGE box;
At present, only the GiST, SP-GiST, GIN and BRIN index methods support a
STORAGE type that's different from the column data type. The GiST
compress and
decompress support routines must deal with data-type conversion when
STORAGE is used. SP-GiST likewise requires a
compress support function to convert to the storage type, when that is different; if an SP-GiST opclass also supports retrieving data, the reverse conversion must be handled by the
consistent function. In GIN, the
STORAGE type identifies the type of the "key" values, which normally is different from the type of the indexed column — for example, an operator class for integer-array columns might have keys that are just integers. The GIN
extractValue and
extractQuery support routines are responsible for extracting keys from indexed values. BRIN is similar to GIN: the
STORAGE type identifies the type of the stored summary values, and operator classes' support procedures are responsible for interpreting the summary values correctly.
If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.


text:
P/N: 5190-01 Harley Softail Custom FXSTC— Fits Years: 2007-2010*
SuperBrace is the leading motorcycle fork stabilizer. Our patented brace provides better stability,superior aerodynamics and a more streamlined look than other multi-piece braces on the market.
- Eliminates Fork Flex
- Reduces low and high speed wobbles.
- Improves stability in tight cornering.
- Improves tire life and reduces cupping.
- Decreases sensitivity to rough road surfaces and rain grooves.
- Each SuperBrace is designed and manufactured for each specific motorcycle.
- Every SuperBrace is made of 6061-T6 aircraft aluminum and machined to a tolerance of + or - .002 of an inch, with a polished finish.
- Ten minute easy installation.
- Competition proven by world class racers.
- We stand behind our product with a 30 Day Money Back Guarantee.

subset: commoncrawl


text:
Telescopic Fire Swatter 2 to 4 foot$ 174.99
- Built tough to Industrial standards, currently in use by Military and Government agencies, Businesses, Firefighters, Tradesmen and Trailblazers. Made in USA
- Heavy duty male tool head threads into the female Inteletool telescopic pole and then secured with a nylon collar lock, will not fall off
- Space saver, great for trunk, shelf or storage compartment in your home, vehicle (RV,4x4) place of business or on an ATV, search and rescue vehicle or fire truck
- Great customer service! Email us at firstname.lastname@example.com or call 330-886-TOOL (8665) with any questions
- Special Feature: Designed to be a part of your own custom built tool kit by Inteletool.
- Cost Saver Idea! The way to bring the cost of this tool down is to buy multiple tool heads and a few handles. The cost per tool comes down exponentially. Ex. if you buy 6 heads and 2 handles the avg. cost is $370.00 spread out over 6 tool options available to you = $60 per tool.


text:
Larry Page, Sergey Brin, and Eric Schmidt have eight jets between the three of them, reports Mercury News.
They want to pay $33 million to help finish renovation of Moffett Federal Field, a joint civilian/military airport located between Mountain View and Sunnyvale.
In exchange, they want to be able to use 2/3 of the floorspace to house their eight aircraft.
The proposal has no official Google involvement — a company called H211 owns and operates the Google jets.
Officials at Moffett Field are skeptical. "We don't want to see 'Google' in 200-foot letters on that hangar," said Steve Williams of the Save Hangar One Committee.
Ken Ambrose, director of operations for H211, said that the Google execs don't want that either.
But 2.6 jets per person? TechCrunch's Jon Orlin offers his take:
On one hand, the Google leaders can spend their money any way they please. Their time is valuable, and using the jets makes them more efficient. On the other hand, using private jets is not very environmentally friendly for leaders of a company that prides itself [on] being green.


text:
Product Features
- Combining with R-32 Bluevolution technology, reduces environmental impact with 68% compared to R-410A, leads directly to lower energy consumption thanks to its high energy efficiency and has up to lower 16% refrigerant charge
- Automatic filter cleaning results in higher efficiency & comfort and lower maintenance costs. 2 filters available: standard filter and finer mesh filter (for fine dust applications e.g. clothing shops)
- Two optional intelligent sensors improve energy efficiency and comfort
- Lowest installation height in the market: 214mm for class 20-63
- Modern style decoration panel is available in 3 different variations: white (RAL9010) with grey louvers, full white (RAL9010) or auto cleaning panel
- Unified indoor unit range for R-32 and R-410A
- Individual flap control: flexibility to suit every room layout without changing the location of the unit!
- 5 different fan speeds available for maximum comfort
- Reduced energy consumption thanks to specially developed small tube heat exchanger, DC fan motor and drain pump
- Optional fresh air intake
- Branch duct discharge allows to optimize air distribution in irregular shaped rooms or to supply air to small adjacent rooms
- Standard drain pump with 675mm lift increases flexibility and installation speed
Presence & floor sensor
The presence sensor directs the air away from any person detected in the room, when the air flow control is on. The floor sensor detects the average floor temperature and ensures an even temperature distribution between ceiling and floor.
Home leave operation
Maintains the indoor temperature at your specified comfort level during absence, thus saving energy
Auto-cleaning filter
The filter automatically cleans itself once per day. Simplicity of upkeep means optimum energy efficiency and maximum comfort without the need for expensive or time-consuming maintenance.
Draught prevention
When starting to warm up or when the thermostat is off, the air discharge direction is set horizontally and the fan to low speed, to prevent draught. After warming up, air discharge and fan speed are set as desired.
Individual flap control
Individual flap control via the wired remote controller enables you to easily fix the position of each flap individually, to suit any new room configuration. Optional closure kits are available as well.
Fan only
The unit can be used as fan, blowing air without heating or cooling.
Auto cooling-heating changeover
Automatically selects heating or cooling mode to achieve the set temperature.
Whisper quiet
Daikin indoor units are whisper quiet. Also the outdoor units are guaranteed not to disturb the quiet of the neighbourhood.
Ceiling soiling prevention
Prevents air from blowing out too long in horizontal position, to prevent ceiling stains.
Vertical auto swing
Possibility to select automatic vertical moving of the air discharge flaps for efficient air and temperature distribution throughout the room.
Fan speed steps (5 steps)
Allows to select up to the given number of fan speed.
Dry programme
Allows humidity levels to be reduced without variations in room temperature.
Air filter
Removes airborne dust particles to ensure a steady supply of clean air.
Weekly timer
Can be set to start heating or cooling anytime on a daily or weekly basis.
Infrared remote control (optional)
Starts, stops and regulates the air conditioner from a distance.
Wired remote control (optional)
Starts, stops and regulates the air conditioner.
Centralised control (optional)
Starts, stops and regulates several air conditioners from one central point.
The unit restarts automatically at the original settings after power failure.
Self diagnosis
Simplifies maintenance by indicating system faults or operating anomalies.
Drain pump kit (standard)
Facilitates condensation draining from the indoor unit.
Infrastructure cooling
Remove in a reliable, efficient and flexible way the heat constantly generated by the IT and server equipment to ensure maximum uptime while offering the best return on investment.
Twin/triple/double twin application
2,3 or 4 indoor units can be connected to only a single outdoor unit even if they have different capacities. All indoor units operate within the same heating or cooling mode from one remote control.
Multi model application
Up to 5 indoor units can be connected to a single outdoor unit, even if they have different capacities. All indoor units can individually be operated within the same heating or cooling mode.


text:
(877) 218-1247
open 24 hours – 7 days a week
Hours of Operations
Monday 12 am – 12 am
Tuesday 12 am – 12 am
Wednesday 12 am – 12 am
Thursday 12 am – 12 am
Friday 12 am – 12 am
Saturday 12 am – 12 am
Sunday 12 am – 12 am
Search Pachuta ADA Dentists >>
Maybe your wisdom teeth were giving you a severe headache and a serious tooth pain. You used ice, swallowed a bottle of aspirin and waited on Monday to sneak around. Today, people work on jobs at all hours catering to the general public. This often implies that persons working odd hours and odd days search for after hours help when they require it. They might not know that a dental practitioner that takes United Concordia in Pachuta is available after hours. Call the toll-free number for a match to a dental practitioner who uses emergency services at reasonable rates. Remember to inquire about cash discount rates.
© 2023, 24hourdental.org - All Rights Reserved -
Privacy & Terms


text:
Homeaway cabins in cherokee | Homeaway Cabins | HomeAway (Vrbo) | HomeAway Holiday Rentals | HomeAway Vacations – Find the best holiday rentals! Get the best deal for your vacation package!
HomeAway Holiday Rentals| Vrbo | Beach Houses | Cabins | Vrbo Vacation Rentals | HomeAway Vacations
HomeAway is a vacation rental marketplace with more than 2,000,000 vacation rentals in 190 countries listed on its website. It operates through 50 websites in 23 languages through which it offers rentals of cabins, condos, castles, villas, barns, and farmhouses. Founded in February 2005 and headquartered in Austin, Texas, the company became a publicly traded company in 2011. Expedia acquired HomeAway on December 15, 2015.


text:
Photos from Peru
small flag
|Photo Galleries from Peru (497 total)
|Peruvian Cities
|Peruvian Regions
All photos are copyrighted and may not be used without permission from the photographer.
Flags, maps, and country data taken from the CIA World Factbook.
Other content Copyright © 2003, pbase.com LLC. All Rights Reserved.


text:
The wiki is being retired!
Documentation is now handled by the same processes we use for code: Add something to the Documentation/ directory in the coreboot repo, and it will be rendered to https://doc.coreboot.org/. Contributions welcome!
GRUB 2 is a modular, multiboot-capable bootloader for many operating systems that can be used as a payload for coreboot.
GRUB 2 can be launched:
- Directly by coreboot as a payload
- Directly by SeaBIOS as a payload
- By SeaBIOS, on disk, as it would with a normal BIOS.
Recent bzr versions have improved memory management that removes the memory limitations when ran as a payload.
signed kernels
GRUB is capable of running only trusted(signed) kernels.
- it supports only DSA gpg keys
Here's a little howto.
First generate a key:
$ gpg --gen-key gpg (GnuPG) 2.0.19; Copyright (C) 2012 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 3 DSA keys may be between 1024 and 3072 bits long. What keysize do you want? (2048) 3072 Requested keysize is 3072 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: Denis 'GNUtoo' Carikli Email address: firstname.lastname@example.com Comment: Kernel signing key You selected this USER-ID: "Denis 'GNUtoo' Carikli (Kernel signing key) <firstname.lastname@example.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. gpg: WARNING: some OpenPGP programs can't handle a DSA key with this digest size gpg: key C86D4C64 marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u pub 3072D/C86D4C64 2013-03-13 Key fingerprint = 7244 AC33 F9A7 9AE8 30DE 8996 9097 B48D C86D 4C64 uid Denis 'GNUtoo' Carikli (Kernel signing key) <firstname.lastname@example.com> Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose.
Then sign the kernels and initramfs:
cd /boot sudo -E gpg --detach-sign vmlinuz-linux-libre-pae sudo -E gpg --detach-sign initramfs-linux-libre-pae.img
gpg --export > boot.key
Then you can put the key on the memdisk (advised) or the boot partition for test purposes only. Then in GRUB do (for testing purposes):
trust boot.key set check_signatures=enforce
to only boot correctly signed kernels and initramfs...
Then load kernel and initramfs as usual...
Trisquel, Ubuntu, Debian
We want automatics hooks to sign our kernel so we don't have to do it manually each time... The following howto was tested on trisquel 6 Generate the key as root(sudo su) like we just explained, but without a password In debian based distributions you can hook the kernel build to sign the result: Add the following to /etc/kernel/postinst.d/yy-update-signatures
#! /bin/sh set -e version="$1" gpg --detach-sign /boot/vmlinuz-${version} gpg --detach-sign /boot/initrd.img-${version}
Then do:
chmod +x /etc/kernel/postinst.d/yy-update-signatures
Then do:
gpg --export > /boot/boot.key
Then modify /etc/grub.d/10_linux to use bash instead of sh like that:
#! /bin/bash
And also modify to that:
case x`uname -m` in xi?86 | xx86_64) list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi done` ;; *) list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi done` ;; esac
To look like that:
case x`uname -m` in xi?86 | xx86_64) list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do if [[ "$i" != /boot/*.sig ]] ; then if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi fi done` ;; *) list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi done` ;; esac
LUKS disks openning
GRUB is capable of opening LUKS disks like that:
grub> ls (ata2) (ata2,msdos3) (ata2,msdos2) (ata2,msdos1) (usb0) (usb0,msdos1) (ata6) (memdisk) grub> cryptomount (ata2,msdos3) Attempting to decrypt master key... Enter passphrase for ata2,msdos3 (431439b0870f40a3bfe8f3ca3aa7072a): Slot 0 opened grub> ls (crypto0) (ata2) (ata2,msdos3) (ata2,msdos2) (ata2,msdos1) (usb0) (usb0,msdos1) (ata6) (memdisk) grub> set root=crypto0 grub> ls / lost+found/ boot/ var/ dev/ run/ etc/ tmp/ sys/ proc/ usr/ lib/ sbin/ bin/ home/ mnt/ opt/ root/ srv/ media/
Note that you have to type the password and so it's better to have some kind of output (VGA, Serial etc...)
Other features
Payloads launching
GRUB is capable of launching payloads. See the "Payloads" section of this page
To enable serial, add the following on top of your grub.cfg:
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 terminal_input --append serial terminal_output --append serial
Other things
Append that in your configuration:
terminal_input --append at_keyboard #add keyboard support. #set timeout=1 #you may want to set a timeout #set pager=1 # you may want to use the pager or not play 480 440 1 #play a beep at startup set prefix=(memdisk)/boot/grub
In case of native graphics you may want the following:
gfxpayload=keep terminal_output --append gfxterm
Here is how to load the SeaBIOS payload from the memdisk.
menuentry 'SeaBios' { set root='memdisk' echo 'Loading SeaBios ...' chainloader /bios.bin.elf }
see in "creating the GRUB payload" how to include the file in the memdisk...
Here's an example on how to load the parabola distribution on the Lenovo X60 from the fifth partition.
menuentry 'Parabola GNU/Linux-libre GNU/Linux, with Linux librepae kernel [Serial]' { insmod ahci insmod part_msdos set root='ahci0,msdos5' echo 'Loading Linux librepae kernel ...' linux /vmlinuz-linux-libre-pae root=/dev/mapper/root ro cryptdevice=/dev/sda6:root idle=halt pcie_aspm=force console=ttyS0,115200 echo 'Loading initial ramdisk ...' initrd /initramfs-linux-libre-pae.img }
Scanning for grub.cfg on local Hard Drives.
menuentry 'Scan for OS on internal HDD' { insmod regexp insmod ahci insmod part_msdos for x in (ahci0,*) ; do if [ -f "$x/grub/grub.cfg" ] ; then menuentry "Load Config from $x" $x { root=$2 configfile /grub/grub.cfg } fi if [ -f "$x/boot/grub/grub.cfg" ] ; then menuentry "Load Config from $x" $x { root=$2 configfile /boot/grub/grub.cfg } fi done }
bzr branch http://bzr.savannah.gnu.org/r/grub/trunk/grub cd grub ./autogen.sh ./configure --with-platform=coreboot make sudo make install #install the uttilities
creating the GRUB payload
Create a target directory:
mkdir memdisk
Then copy your grub.cfg in:
Then adapt and run that script:
#!/bin/sh rm -f grub2-x60.elf #copy the payloads you want cp ../../seabios-x60/out/bios.bin.elf ./memdisk/ cp ../../coreboot-qemu/payloads/nvramcui/nvramcui.elf ./memdisk/ cp ../../coreboot-x60/payloads/coreinfo/build/coreinfo.elf ./memdisk/ cp ../../memtest86+-4.20/memtest ./memdisk/memtest.elf #and some files cp ../../coreboot-x60/bootsplash.jpg ./memdisk/ cd memdisk grub-mkstandalone -O i386-coreboot -o ../grub2-x60.elf $(find -type f) echo "--RESULT--" ls -l -h ../grub2-x60.elf
combining with coreboot
As a SeaBIOS payload
build/cbfstool build/coreboot.rom add-payload -n img/grub2 -f grub2.elf -t raw build/cbfstool build/coreboot.rom print
That way it will be possible to run GRUB as a payload after SeaBIOS: The advantage is that it's less risky. At runtime press F12 and you'll have the GRUB option.
As a Coreboot payload
Advantages: faster, can be used for security
Disadvantages: more risky if you have no way to recover
In make menuconfig of coreboot, select the path of grub2.elf.
Also make sure you have some kinds of output such as VGA or serial (it needs to be activated in both coreboot and GRUB)
Before flashing
You should try the grub2.elf on qemu before flashing it to a real mainboard/laptop.


text:
You are viewing our photo titled Compare Home Security Systems which is attached to our home design article about Compare Home Security Systems. Be sure to read the entire article for more inspiration about Compare Home Security Systems.
Home › Compare Home Security Systems › Compare Home Security Systems
Compare Home Security Systems
Compare Home Security Systems Benefits
Resolution: 426 × 282
Looking for more inspiration? See more Compare Home Security Systems and Compare Home Security Systems photos:
Photos, wallpapers, and other images in our articles are properly licensed, used with permission, or obtained through free sources. If we made a mistake and you wish to claim credit for this Compare Home Security Systems image or any other photo displayed here or request its removal please contact us. We always respond to all requests and we'll gladly add proper credit for your photos.
Found something interesting? Be sure to come back for more by following us on Facebook, or subscribe to our upcoming home design ideas via email.
Like us!
Read Next →
DIY Decorating Ideas for Apartments
Home Design
Christmas Interior Decorating Ideas
Garden Tool Maintenance
Recently published:
DIY Decorating Ideas for Apartments
Even though you only rent the apartment you are no living in, however, it does not mean that you cannot make the apartment look totally great and really meet your taste and personality. Indeed, you will not be allowed to do any major change to its construction and model but you a[...]
Christmas Interior Decorating Ideas
Christmas is always waited for by many families around the world and even decorating their homes for the Christmas season can also even be enjoyed by them and this task is usually started with Christmas interior decorating ideas because the interior decoration can be made attract[...]
Garden Tool Maintenance
Gardening is a lovely activity for people who really like plants and they also have much time for maintain them, but the garden tool maintenance should also be the important thing you remember to do because without maintaining your garden tools, you will also difficult for mainta[...]
Cabin Fever Homes
There are more people who prefer the prefab homes as their new living place and Cabin Fever Homes is one of the companies knowing what people need these days so they will gladly assist you to make your dream of having a prefab or even cabin house as your new home come true, are y[...]
Laying Tiles In a Bathroom: Beginner Tips
Bathroom floor is one of the most important aspects in your bathroom area. In this present day, you might see there are many options of the bathroom flooring which you can choose according to your needs. One of those options is tile flooring. Installing the tile flooring in your [...]


text:
Skip to main content
Atholl Homes
Advanced search
Advanced search
Original commissioning authority
Original location authority
Present day authority
Building contractor
Building system
Committee approval date
Construction start date
Construction completion date
Dumbarton Burgh Council (1)
Apply Dumbarton Burgh Council filter
Dumbarton Burgh Council (1)
Apply Dumbarton Burgh Council filter
West Dunbartonshire Council (1)
Apply West Dunbartonshire Council filter
A.A. Stewart (3)
Apply A.A. Stewart filter
A.A. Stuart (4)
Apply A.A. Stuart filter
A.B. Johnson (1)
Apply A.B. Johnson filter
A. Craigie (1)
Apply A. Craigie filter
A.E. Prowting (1)
Apply A.E. Prowting filter
A.E. Symes (13)
Apply A.E. Symes filter
A.F.R. Godfrey (2)
Apply A.F.R. Godfrey filter
A. Fairhead (6)
Apply A. Fairhead filter
A.G. Clower (1)
Apply A.G. Clower filter
A. Hall (16)
Apply A. Hall filter
A.J. Dunning (1)
Apply A.J. Dunning filter
A.J. White (1)
Apply A.J. White filter
A. Roberts (4)
Apply A. Roberts filter
A. Sanders (1)
Apply A. Sanders filter
A.T. Chown (4)
Apply A.T. Chown filter
A.T. Rowley (6)
Apply A.T. Rowley filter
A.V. Shenton (2)
Apply A.V. Shenton filter
Appin Estates (1)
Apply Appin Estates filter
Remove Atholl Homes filter
Atholl Homes
B. Sunley (18)
Apply B. Sunley filter
Bates (15)
Apply Bates filter
Beazer (1)
Apply Beazer filter
Bett (4)
Apply Bett filter
Blackburn (3)
Apply Blackburn filter
Bovis (5)
Apply Bovis filter
Bradford (Matthews & Mumby) (1)
Apply Bradford (Matthews & Mumby) filter
Branson & Jones (1)
Apply Branson & Jones filter
Brims (5)
Apply Brims filter
British Lift Slab (7)
Apply British Lift Slab filter
Brixton Development Co. (1)
Apply Brixton Development Co. filter
Brown & Jackson (1)
Apply Brown & Jackson filter
Bryant (69)
Apply Bryant filter
Bushby (1)
Apply Bushby filter
C. Claxon (1)
Apply C. Claxon filter
C. Gray (3)
Apply C. Gray filter
C.H. Pearce (1)
Apply C.H. Pearce filter
C.J. Manning (1)
Apply C.J. Manning filter
C. Miskin (2)
Apply C. Miskin filter
Calgary & Edmonton Land Co. (1)
Apply Calgary & Edmonton Land Co. filter
Carlton (5)
Apply Carlton filter
Carlton Contractors (5)
Apply Carlton Contractors filter
Carruthers Davies (1)
Apply Carruthers Davies filter
Central & Suburban Property Co. (1)
Apply Central & Suburban Property Co. filter
Christiani Shand (1)
Apply Christiani Shand filter
Clarke (1)
Apply Clarke filter
Clarke Barton (1)
Apply Clarke Barton filter
Concrete (4)
Apply Concrete filter
Concrete Northern (10)
Apply Concrete Northern filter
Concrete Scotland (11)
Apply Concrete Scotland filter
Concrete Southern (10)
Apply Concrete Southern filter
Costain (13)
Apply Costain filter
Coulson (1)
Apply Coulson filter
Cox (1)
Apply Cox filter
Croudace (4)
Apply Croudace filter
Crudens (45)
Apply Crudens filter
Cussins (3)
Apply Cussins filter
Davies Construction (1)
Apply Davies Construction filter
Daws (3)
Apply Daws filter
Deeley (1)
Apply Deeley filter
Demolition & Construction Co. (1)
Apply Demolition & Construction Co. filter
direct municipa labour (1)
Apply direct municipa labour filter
direct municipal labour (328)
Apply direct municipal labour filter
Don Properties (1)
Apply Don Properties filter
Douglas (1)
Apply Douglas filter
Dove Bros (1)
Apply Dove Bros filter
Drabble Construction (1)
Apply Drabble Construction filter
Drury (3)
Apply Drury filter
Drury North-Western (2)
Apply Drury North-Western filter
Dudley Coles (1)
Apply Dudley Coles filter
Duncan Logan (1)
Apply Duncan Logan filter
E.A. Bond (1)
Apply E.A. Bond filter
E. & L. Berg (1)
Apply E. & L. Berg filter
E.G.M. Cape (1)
Apply E.G.M. Cape filter
E.H. Smith (8)
Apply E.H. Smith filter
E.J.G. Morgan (1)
Apply E.J.G. Morgan filter
E.J. Lacey (2)
Apply E.J. Lacey filter
E. Mortimer (2)
Apply E. Mortimer filter
EBC and Sleeman (2)
Apply EBC and Sleeman filter
F. & F.S. White (1)
Apply F. & F.S. White filter
F.B. McKee (4)
Apply F.B. McKee filter
F. Bilton (3)
Apply F. Bilton filter
F.G. Minter (17)
Apply F.G. Minter filter
F.J. Moreton (1)
Apply F.J. Moreton filter
F. O'Hare (Newry) (1)
Apply F. O'Hare (Newry) filter
F. Privett (1)
Apply F. Privett filter
F.R. Hipperson (1)
Apply F.R. Hipperson filter
F. Troy (5)
Apply F. Troy filter
Fairclough (1)
Apply Fairclough filter
Fairweather (2)
Apply Fairweather filter
Farrans (6)
Apply Farrans filter
Farrow (7)
Apply Farrow filter
Fassnidge Son & Norris (1)
Apply Fassnidge Son & Norris filter
Federated Contractors (1)
Apply Federated Contractors filter
Federated Developments (1)
Apply Federated Developments filter
Finnegan (1)
Apply Finnegan filter
Five Oaks (3)
Apply Five Oaks filter
Ford & Walton (2)
Apply Ford & Walton filter
Fram (9)
Apply Fram filter
Fram, Higgs & Hill (Camus) (5)
Apply Fram, Higgs & Hill (Camus) filter
Fram Higgs & Hill (1)
Apply Fram Higgs & Hill filter
Fram Russell (4)
Apply Fram Russell filter
G. & J. Seddon (1)
Apply G. & J. Seddon filter
G. Calverley (2)
Apply G. Calverley filter
G. Comber (1)
Apply G. Comber filter
G.E. Wallis (4)
Apply G.E. Wallis filter
G.M. Pearson (2)
Apply G.M. Pearson filter
G. Parker (1)
Apply G. Parker filter
G. Percy Trentham (1)
Apply G. Percy Trentham filter
G. Ward (2)
Apply G. Ward filter
G. Young (2)
Apply G. Young filter
Galbraith (1)
Apply Galbraith filter
Gaze (1)
Apply Gaze filter
Gee Walker and Slater (28)
Apply Gee Walker and Slater filter
Gerrard (1)
Apply Gerrard filter
Gilbert Ash (10)
Apply Gilbert Ash filter
Gilbert-Ash Eastern (1)
Apply Gilbert-Ash Eastern filter
Gilbert-Ash Northern (2)
Apply Gilbert-Ash Northern filter
Gilbert Ash (Northern) (1)
Apply Gilbert Ash (Northern) filter
Gilbert-Ash Scotland (7)
Apply Gilbert-Ash Scotland filter
Gilbert Ash Southern (1)
Apply Gilbert Ash Southern filter
GKN Reinforcements (1)
Apply GKN Reinforcements filter
Gleeson (Sheffield) (10)
Apply Gleeson (Sheffield) filter
Globe Construction (1)
Apply Globe Construction filter
Globe Contractors (2)
Apply Globe Contractors filter
Gosport and District Builders' Guild (2)
Apply Gosport and District Builders' Guild filter
Gray Conoley (1)
Apply Gray Conoley filter
Greenaway & Son (1)
Apply Greenaway & Son filter
Gregory (3)
Apply Gregory filter
Gregory Housing (3)
Apply Gregory Housing filter
Griggs (5)
Apply Griggs filter
H. Beal (1)
Apply H. Beal filter
H. Boot (3)
Apply H. Boot filter
H.C. Richardson (2)
Apply H.C. Richardson filter
H. Dernie (1)
Apply H. Dernie filter
H.E. Collins (2)
Apply H.E. Collins filter
H. Fairweather (12)
Apply H. Fairweather filter
H. Farrow (9)
Apply H. Farrow filter
H. Howard (1)
Apply H. Howard filter
H.J. Paris (1)
Apply H.J. Paris filter
H. Jones (2)
Apply H. Jones filter
H. Kent (3)
Apply H. Kent filter
H. Leggat (2)
Apply H. Leggat filter
H. Neal (9)
Apply H. Neal filter
H. Richardson (17)
Apply H. Richardson filter
H.T. Oliver (2)
Apply H.T. Oliver filter
H. Webb (5)
Apply H. Webb filter
Halse (4)
Apply Halse filter
Hammond & Miles (1)
Apply Hammond & Miles filter
Hart Bros (2)
Apply Hart Bros filter
Hawker Smith (6)
Apply Hawker Smith filter
Hawker Smith (Concrete Southern) (2)
Apply Hawker Smith (Concrete Southern) filter
Hawkins (1)
Apply Hawkins filter
Hawkins Bros (3)
Apply Hawkins Bros filter
Haymills (1)
Apply Haymills filter
Headway Construction (1)
Apply Headway Construction filter
Hepburn Bros (2)
Apply Hepburn Bros filter
Higgs & Hill (3)
Apply Higgs & Hill filter
Hoad (1)
Apply Hoad filter
Holdyne (1)
Apply Holdyne filter
Holland Hannen and Cubitt (23)
Apply Holland Hannen and Cubitt filter
Holloway Bros (7)
Apply Holloway Bros filter
Holst (6)
Apply Holst filter
Howe & Bishop (1)
Apply Howe & Bishop filter
Hugh Mills, Gaye & Co. (1)
Apply Hugh Mills, Gaye & Co. filter
Humphreys (6)
Apply Humphreys filter
J.A. Elliott (2)
Apply J.A. Elliott filter
J. & J. Dean (7)
Apply J. & J. Dean filter
J. & M. Hill (4)
Apply J. & M. Hill filter
J. Bennett (1)
Apply J. Bennett filter
J. Best (1)
Apply J. Best filter
J. Cartwright (4)
Apply J. Cartwright filter
J. Croad (1)
Apply J. Croad filter
J.E. Carroll (1)
Apply J.E. Carroll filter
J.E. Wiltshier (2)
Apply J.E. Wiltshier filter
J. Finnegan (3)
Apply J. Finnegan filter
J. Gerrard (14)
Apply J. Gerrard filter
J. Harrison (1)
Apply J. Harrison filter
J. Jarvis (9)
Apply J. Jarvis filter
J. Knox (1)
Apply J. Knox filter
J. Long (1)
Apply J. Long filter
J.M. Hill (8)
Apply J.M. Hill filter
J.M. Jones (10)
Apply J.M. Jones filter
J. Mather (1)
Apply J. Mather filter
J. Miller (17)
Apply J. Miller filter
J. Moulds (1)
Apply J. Moulds filter
J. Murphy (1)
Apply J. Murphy filter
J.R. Deacon (1)
Apply J.R. Deacon filter
J.R. Rooff (1)
Apply J.R. Rooff filter
J. Turner (4)
Apply J. Turner filter
Jarvis (2)
Apply Jarvis filter
John Hunt (4)
Apply John Hunt filter
Johnson & Bailey (1)
Apply Johnson & Bailey filter
Kendall Cross (1)
Apply Kendall Cross filter
Kendrick (6)
Apply Kendrick filter
Kenny & Reynolds (1)
Apply Kenny & Reynolds filter
Kent & Sussex Contractors (2)
Apply Kent & Sussex Contractors filter
Kingston Building Co. (1)
Apply Kingston Building Co. filter
Kirk & Kirk (38)
Apply Kirk & Kirk filter
Kyle Stewart (2)
Apply Kyle Stewart filter
L.H. Beal (2)
Apply L.H. Beal filter
L.J. Hope (1)
Apply L.J. Hope filter
L. Telling (1)
Apply L. Telling filter
Laidlaw (13)
Apply Laidlaw filter
Laing (139)
Apply Laing filter
Langley (2)
Apply Langley filter
Lavender McMillan (4)
Apply Lavender McMillan filter
Lawrence (8)
Apply Lawrence filter
Leaway (3)
Apply Leaway filter
Leggat (4)
Apply Leggat filter
Leslie (9)
Apply Leslie filter
Lewis & Watters (1)
Apply Lewis & Watters filter
Lockwoods Construction (1)
Apply Lockwoods Construction filter
London Cooperative Society (1)
Apply London Cooperative Society filter
Loudon (3)
Apply Loudon filter
Lovell (2)
Apply Lovell filter
M.A. Boswall (1)
Apply M.A. Boswall filter
M.&F. Foster (1)
Apply M.&F. Foster filter
M. Howard (3)
Apply M. Howard filter
M.J. Gleeson (30)
Apply M.J. Gleeson filter
M. James (1)
Apply M. James filter
Marchmont Properties (1)
Apply Marchmont Properties filter
Marshall Andrew (1)
Apply Marshall Andrew filter
Marshall Builders (1)
Apply Marshall Builders filter
Marshall Builders (Elland) (1)
Apply Marshall Builders (Elland) filter
Matthew James (1)
Apply Matthew James filter
Matthews & Mumby (10)
Apply Matthews & Mumby filter
Maxim (5)
Apply Maxim filter
McAlpine (15)
Apply McAlpine filter
Mekron (1)
Apply Mekron filter
Miller (5)
Apply Miller filter
Miller Bros. & Buckley (1)
Apply Miller Bros. & Buckley filter
Minter (2)
Apply Minter filter
Miskin (1)
Apply Miskin filter
Mitchell (6)
Apply Mitchell filter
Mitchell Construction (1)
Apply Mitchell Construction filter
Morriss & Jacombs (9)
Apply Morriss & Jacombs filter
Morton Potter (1)
Apply Morton Potter filter
Moss (1)
Apply Moss filter
Mowlem (5)
Apply Mowlem filter
Myton (7)
Apply Myton filter
N. Sinclair (4)
Apply N. Sinclair filter
Norwest Construction (1)
Apply Norwest Construction filter
Norwest Holst (1)
Apply Norwest Holst filter
Nott Brodie (1)
Apply Nott Brodie filter
Nox (2)
Apply Nox filter
Oldham Estate (1)
Apply Oldham Estate filter
P. Bilton (3)
Apply P. Bilton filter
P. Cameron (4)
Apply P. Cameron filter
P. Carvill (1)
Apply P. Carvill filter
P.G. Evans (1)
Apply P.G. Evans filter
P. Williams (1)
Apply P. Williams filter
Patman & Fotheringham (1)
Apply Patman & Fotheringham filter
Pauling (5)
Apply Pauling filter
Pauling Construction (2)
Apply Pauling Construction filter
Peak (11)
Apply Peak filter
Perry's (4)
Apply Perry's filter
Perrys (3)
Apply Perrys filter
Pitchers (17)
Apply Pitchers filter
Pochin (1)
Apply Pochin filter
Precast Associated Construction (1)
Apply Precast Associated Construction filter
Prestige (1)
Apply Prestige filter
Prestige & Co. (1)
Apply Prestige & Co. filter
R. Corben (1)
Apply R. Corben filter
R. Durtnell (1)
Apply R. Durtnell filter
R. Fairweather (1)
Apply R. Fairweather filter
R.G. Carter (4)
Apply R.G. Carter filter
R. Hart (11)
Apply R. Hart filter
R. Holford (1)
Apply R. Holford filter
R.J. Barwick (1)
Apply R.J. Barwick filter
R. Mansell (2)
Apply R. Mansell filter
R. Marriott (1)
Apply R. Marriott filter
R. Miller (2)
Apply R. Miller filter
Ravenseft (1)
Apply Ravenseft filter
Reema (25)
Apply Reema filter
Reema Scotland (14)
Apply Reema Scotland filter
Rice (15)
Apply Rice filter
Robinson (1)
Apply Robinson filter
Rooff (10)
Apply Rooff filter
Rostance (2)
Apply Rostance filter
Rowley Bros (39)
Apply Rowley Bros filter
Rowlinson (1)
Apply Rowlinson filter
Roy & Partners (1)
Apply Roy & Partners filter
Ruddock & Meighan (2)
Apply Ruddock & Meighan filter
Rush & Tompkins (36)
Apply Rush & Tompkins filter
S.G. & A. Agombar (1)
Apply S.G. & A. Agombar filter
S. Miller (19)
Apply S. Miller filter
S. Varney (2)
Apply S. Varney filter
Scotcon (5)
Apply Scotcon filter
Scott (1)
Apply Scott filter
Scott Hale (1)
Apply Scott Hale filter
Scottish Special Housing Association direct labour (2)
Apply Scottish Special Housing Association direct labour filter
Seddon (6)
Apply Seddon filter
Selleck Nicholas Williams (1)
Apply Selleck Nicholas Williams filter
Selleck Nicholls Williams (3)
Apply Selleck Nicholls Williams filter
Shepherd (14)
Apply Shepherd filter
Shepherd Taylor (1)
Apply Shepherd Taylor filter
Simms, Sons & Cooke (1)
Apply Simms, Sons & Cooke filter
Simms Sons & Cooke (22)
Apply Simms Sons & Cooke filter
Sindall (1)
Apply Sindall filter
Sir Lindsay Parkinson (12)
Apply Sir Lindsay Parkinson filter
Sir R. Lloyd (3)
Apply Sir R. Lloyd filter
Smart (5)
Apply Smart filter
Speirs (10)
Apply Speirs filter
Spiers (1)
Apply Spiers filter
Stanley Hugh Leach (1)
Apply Stanley Hugh Leach filter
Stewart (4)
Apply Stewart filter
Stewart & Partners (10)
Apply Stewart & Partners filter
Stone (4)
Apply Stone filter
Stoneleigh Developments (1)
Apply Stoneleigh Developments filter
Stox (3)
Apply Stox filter
Stuart (1)
Apply Stuart filter
Stubbings (21)
Apply Stubbings filter
Sunley (5)
Apply Sunley filter
Symes (4)
Apply Symes filter
T. Bates (6)
Apply T. Bates filter
T.G. Construction (1)
Apply T.G. Construction filter
T. Partington (6)
Apply T. Partington filter
T.R. Roberts (1)
Apply T.R. Roberts filter
Tarmac (6)
Apply Tarmac filter
Taylor Woodrow (6)
Apply Taylor Woodrow filter
Taylor Woodrow-Anglian (20)
Apply Taylor Woodrow-Anglian filter
Terson (1)
Apply Terson filter
Tersons (137)
Apply Tersons filter
Thaw & Campbell (1)
Apply Thaw & Campbell filter
Thomas & Edge (11)
Apply Thomas & Edge filter
Thomas Bates (1)
Apply Thomas Bates filter
Thomas McInerney (30)
Apply Thomas McInerney filter
Thyssen (1)
Apply Thyssen filter
Token (7)
Apply Token filter
Tor (1)
Apply Tor filter
Townson (20)
Apply Townson filter
Trollope & Colls (3)
Apply Trollope & Colls filter
Truscon (75)
Apply Truscon filter
Turriff (3)
Apply Turriff filter
Turriff Construction (1)
Apply Turriff Construction filter
Unera (1)
Apply Unera filter
Unit (33)
Apply Unit filter
Unity Structures (1)
Apply Unity Structures filter
W. & C. French (6)
Apply W. & C. French filter
W. Arnott McLeod (1)
Apply W. Arnott McLeod filter
W.B. Towers (1)
Apply W.B. Towers filter
W. Cowlin (4)
Apply W. Cowlin filter
W.E. Caller (1)
Apply W.E. Caller filter
W. French (1)
Apply W. French filter
W.H. Graze (2)
Apply W.H. Graze filter
W.H. Streeter (1)
Apply W.H. Streeter filter
W. Hall (4)
Apply W. Hall filter
W.J. Anderson (5)
Apply W.J. Anderson filter
W.J. Cearns (3)
Apply W.J. Cearns filter
W.J. Jerram (11)
Apply W.J. Jerram filter
W.J. Marston (12)
Apply W.J. Marston filter
W.J. Whittall (2)
Apply W.J. Whittall filter
W. Lawrence (25)
Apply W. Lawrence filter
W. Lilly (1)
Apply W. Lilly filter
W. Llewellyn (2)
Apply W. Llewellyn filter
W. Moss (22)
Apply W. Moss filter
W. O'Reilly (1)
Apply W. O'Reilly filter
W. Old (1)
Apply W. Old filter
W. Sidnall (1)
Apply W. Sidnall filter
W. Thornton (7)
Apply W. Thornton filter
W. Willett (16)
Apply W. Willett filter
Walker (1)
Apply Walker filter
Ward & Paterson (2)
Apply Ward & Paterson filter
Warings (1)
Apply Warings filter
Warton & Goodship (1)
Apply Warton & Goodship filter
Wates (195)
Apply Wates filter
Whittall (9)
Apply Whittall filter
Whyatt (1)
Apply Whyatt filter
Wickens Group (1)
Apply Wickens Group filter
Wight (1)
Apply Wight filter
Wilson Lovatt (14)
Apply Wilson Lovatt filter
Wimpey (363)
Apply Wimpey filter
Y.J. Lovell (17)
Apply Y.J. Lovell filter
Yorkshire Development Group (6)
Apply Yorkshire Development Group filter
D. Preston (1)
Apply D. Preston filter
J. Rae (1)
Apply J. Rae filter
S. Garner (1)
Apply S. Garner filter
W. Strebel (1)
Apply W. Strebel filter
Committee approval date
Is less than
Is less than or equal to
Is equal to
Is not equal to
Is greater than or equal to
Is greater than
Is empty
Is not empty
format: 2016
Construction start date
Is less than
Is less than or equal to
Is equal to
Is not equal to
Is greater than or equal to
Is greater than
Is empty
Is not empty
format: 2016
Construction completion date
Is less than
Is less than or equal to
Is equal to
Is not equal to
Is greater than or equal to
Is greater than
Is empty
Is not empty
format: 2016
Filters applied:
Atholl Homes
1 results
Central Area
Other location names:
Risk Street


text:
Mobiles : Mobile Handsets
Found (4) product(s)
[ "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-1.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-2.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-3.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-4.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-5.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-6.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-7.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-8.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-9.jpg", "Wizphone-4G-Android-Mobile-WP005-with-Free-Wireless-Bluetooth-Earpod-And-Powerbank-10.jpg" ]33%
[ "Music1-8Mobile-HeemaxFeaturePhoneH9----1.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----2.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----3.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----4.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----5.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----6.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----7.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----8.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----9.jpg", "Music1-8Mobile-HeemaxFeaturePhoneH9----10.jpg" ]55%
[ "Wizphone-W5-Feature-Phone-1.jpg", "Wizphone-W5-Feature-Phone-2.jpg", "Wizphone-W5-Feature-Phone-3.jpg", "Wizphone-W5-Feature-Phone-4.jpg", "Wizphone-W5-Feature-Phone-5.jpg", "Wizphone-W5-Feature-Phone-6.jpg", "Wizphone-W5-Feature-Phone-7.jpg", "Wizphone-W5-Feature-Phone-8.jpg" ]23%
Buy Mobile Handsets
Mobile Handset
Mobile phones have been a core part of one's lifestyle playing an inevitable role in the social systems. Boasting truck loaded features, this communication tool has always captivated the minds. With pacing technology, mobile handsets are coming up with new additional multi-tasking features and various add-on applications.
Confused which mobile phone to choose from the available list Put an end to your worries! No matter what your needs are, there's one stop solution for all your needs, naaptol.com.
Reviewing your favorite handset or cracking some amazing deals on the online mobile phone shopping is no more a herculean task when you're through with naaptol.com. Offering you a wide range of handsets categorized separately to ease your choosing amongst the detailed list. You can easily jot down down your favorite one as per your choice, likewise the specifications, body make or even color or the price range to filter your choices. Apart from the expansive list to quench your savvy needs, we also offer you lucrative offers and additional discounts and giveaways to cherish your needs without breaking your banks.
Undoubtedly, Indian market has been immensely flooded with variety of mobile phones and so is the mobile price in India, standing transparent. We at naaptol.com, commit to deliver you the best handsets equipped with the latest technologies and modern expertise to quench your thirst of having the best.
We know your wishes never end and so is our list. From Karbonn to Apple, and many other renowned brands to choose from. Some of our top chartbuster mobile manufacturers include, Samsung, Nokia, Blackberry, HTC, Sony Ericsson, Apple and our list goes on! Let your style statement count.
Plus, adding to your gizmo-gadget a wide range of accessories are featured along with. Opt the best one for your device and let it compliment to your device's appeal.
Samsung Mobile, Karbonn Mobile, Micromax Mobile, HTC Mobile, Nokia Mobile.


text:
Free delivery nationwide for orders above PKR 3000
Enjoy free shipping on prepaid orders with code FREESHIPPING at checkout.
+92 42 111178956 firstname.lastname@example.com
Free delivery nationwide for orders above PKR 2500
Use code 'StyloApp' on Stylo mobile app to avail a discount of 1000 on spending 5000 and 'Stylo20' for a discount of 500 on spending 2500 respectively.
Rs.1,600 Rs.784
Notify me when this product is available:
Upgrade your little one's wardrobe today with this trendy fleece sweatshirt in white color.
Note: Actual product color may vary slightly from the image shown.
Your cart is empty.
Return To Shop
Taxes, shipping and discounts codes calculated at checkout
Postal/Zip Code
Coupon code will work on checkout page


text:
1/2" John Guest Stem x 1/2" MPT Fitting
List Price $9.36 Factory Direct Price $6.24 Sale Price $5.20
In Stock
1/2" John Guest Stem x 1/2" MPT Fitting
Part Number: PP051624W
This fitting is made of the following components:
- The body is produced in polypropylene (polypro)
- 'O'Rings are EPDM
- The collet is produced in polypropylene with stainless steel teeth
- Quantity Discounts Available - Call for Prices
About John Guest Fittings:
- John Guest Quick Connect Fittings connect and disconnect without tools and never leak.
- John Guest Fittings are reliable and easy to use.
- John Guest fittings are NSF and ISO 9001 Certified and are trusted by the world's largest manufacturers.
- Now you can easily use John Guest fittings at home for a water tight seal every time.
- We carry a large inventory of 1/4", 3/8" & 1/2" fittings, valves & tubing.
- John Guest recently expanded their line of White Polypropylene (Polypro) Fittings.
- Polypro fittings and their EPDM o-rings are more resistant to chemical degradation than the Grey Acetal Fittings which have been available for many years.
additional information
|John Guest


text:
Diamond Coticed Cross 14k Rose Gold Pendant (1 Ctw, G-H Color, I1 Clarity)
And, I am convinced that nothing can ever separate us from God's love. Neither death nor life, neither angels nor demons, neither our fears for today nor our worries about tomorrow-not even the powers of hell can separate us from God's love. No power in the sky above or in the earth below-indeed, nothing in all creation will ever be able to separate us from the love of God that is revealed in Christ Jesus our Lord.Romans 8:38-39
Since the beginning of the Christian era, the cross symbol has been an emblem of faith. This beautiful cross is a wonderful remembrance of God's promise to us. This elegant cross is for the person who would like a symbol to assist in remembering the words of Jesus Christ to help make each day a living testament of actions in the small and big moments of life; for the reminder of faith during times of change, and to remember she/he is loved, always, all ways. And, forgiven... all we need to do is ask.
The diamond reflects rarity, brilliance and breathtaking fire of a gem which survived a journey of billions of years. Symbol of devotion, honor and strength, the elegance of a diamond makes it perfect for life's important occasions. It is the April birthstone.
Fall in love with the latest in rose gold jewelry. What is it about luscious rose gold that has us falling in love with it all over again? It brings warmth, energy and stimulation and is associated with love. Rose gold have a delicate color which intensifies with age. Copper is added to gold because of its bold pinkish-orange color.
The rising price of gold makes this, quite simply, a great investment.
FOOTNOTES: Signature Ensures Safe Delivery
Made to Order Especially for You; Crafted in Approx. 11 Days
Image Enlarged for Detail and May Appear Larger than Actual Size; Make a Template with Measurements to be Sure of Size
Thank You for Your Consideration, We Appreciate You. Faith is Always Fashionable... Never Trendy.
- 16 Hand-Set Diamonds Embellished with High Polished Border of the Cross; Pendant is Crafted in Polished 14k Rose Gold
- Cross Measures 28.20 Millimeters High X 21.20 Millimeters Wide or 1.11 Inches Tall by .83 Inches Wide
- 14k Rose Gold Hidden Bail Inside Dimension is 3.00 Millimeters High X 1.70 Millimeters Wide
- Conflict Free Diamonds in Compliance with Kimberly Code of Conduct
- Made to Order Especially for You, Ships in Approx. 11 Business Days; Happily Made in the USA
Shipping rates depend on the selected shipping speed and weight/size of the items.
To determine the applicable shipping rate for items in your Cart:
- Select Proceed to Checkout
- Select or add your shipping address
- Select a shipping speed and select Continue
- Select a payment method and select Continue
The total shipping & handling cost will be listed under Order Summary
Shipping Policies
The Men's Jewelry Store Shipping Policies
Most packages arrive by the estimated delivery date listed. If you don't receive the package by then, please allow an additional day or two for the package to be delivered. Please note that carriers may deliver packages up until 8 p.m.
Sometimes the carrier makes mistakes, we offer free domestic shipping via USPS Insured First Class Mail, once in a while packages have taken longer to be delivered as the carrier made a mistake and routed the package incorrectly. You can follow the progress of your order as we input the tracking number into your account as soon as we receive the tracking numbers from the carrier.
No Tracking Information
If your package was recently shipped or if it's been sent to an international address using Standard or Expedited Shipping services tracking might not be available. If your package doesn't arrive by the estimated delivery date listed, please wait a few more days. Usually packages arrive on or shortly after the estimated delivery date. We do have a good track record of packages being delivered a day ahead of schedule.
Tracking Information Not Changing
If the estimated delivery date for your package has passed and your tracking information hasn't changed, please allow an additional day or two for the package to be delivered.
International Shipments
In order to save our international clients money, we have your packages sent from our distribution center to our home office via UPS overnight shipping. We then repackage your items and send them to you either via USPS Insured International First Class mail or USPS Expedited or Global Express Mail--which ever you chose.
We send the second tracking number to you via email.
We have found this saves you a substantial amount of money and it seems the packages also arrive a bit faster.
Order Shipped Internationally Not Received/Lost
When an order shipped internationally reaches the destination country, the package may be subject to customs clearance procedures which can cause delays beyond original delivery estimates. Most of the time the package goes right through; in a few rare cases we have seen it take from seven to 14 days for customs to process and clear a package.
This is beyond our control; we mark packages clearly with the contents, weight, and value of items.
International clients may have to pay duty fees to their country for items purchased. Please be aware of your countries policies; we have nothing to do with setting them.
When we ship internationally and you see via the tracking number your package left the San Francisco, Oakland or Los Angeles airport, it will be in your country approximately 11 to 14 hours. Once it leaves the U.S., your country may not update the status of the package even though we have requested for status updates. This is beyond our control.
The amount of time a package takes to clear customs is also beyond our control. Please do hold us accountable for the time it takes for customs to clear your package.
We supply you with a tracking number, if you have questions use that tracking number and call your customs department to find out when they will release your package. They will let you know the progress of your shipment.
It is your responsibility to know your customs policies and duty fees.
Shipping Succinctly
- All orders received on before Noon EST, 1 P.M. CST, 2 P.M PST will be shipped that business day.
- All orders received after Noon EST, 1 P.M. CST, 2 P.M PST will be shipped the following business day.
- All orders placed on U.S. holidays, weekends or other holidays recognized by The Men's Jewelry Store will be shipped on the next business day.
- In rare cases due to unforeseen events, (e.g. extreme weather, shipping company delays, human err—yours, the carriers, us, etc.), these shipment times may be delayed.
- Standard shipments (domestic USA free shipping) are delivered Monday-Saturday (excluding holidays).
- Express shipments (overnight, 2-day, or 3-day) are delivered Monday-Friday (excluding holidays). The delivery times are based on business days for U.S. shipping destinations.
- Next Day or Overnight does not include Saturday, Sunday or holidays; it means the Next Business Day
- Second Day does not include Saturday, Sunday or holidays; it means the Next Two Business Days (often we upgrade this to overnight at no extra charge to you)
- Expedited Shipping does not include Saturday, Sunday or holidays; it means the Next Three Business Days (often we upgrade this to overnight at no extra charge to you)
- Express Saturday Delivery service is not offered.
- You will receive a Shipment Confirmation email once we have released your order for shipping.
- You will receive a second email later that night or early the next day when we input the tracking number. You can access the tracking number by going into your account.
- We personally watch the progress of your shipment, you will receive a third email from us a day before or on the day your package is going to be delivered with the shipment method and a reminder to check for your package.
Shipping Addresses
We can ship to other addresses, but you need to be sure and select (click) the address you would like the package shipped to. If it goes to the incorrect there could be a few reasons for this; perhaps you forgot to click the address or you didn't input it into your account.
We only see the address that was selected when you checked-out.
In a Nutshell
We do our best to treat you like real jewels. We have spent hours researching and testing the most reliable, least expensive and most expeditious ways to get your jewelry to you. If something goes wrong, please be kind as we go to great lengths to make shopping for jewelry fun.


text:
Welcome to the Butterfly Discussion Forums.
Everything about Butterflies (and occasionally moths!)
Discuss anything and everything about butterflies and moths here.
Skippers ID clarification in...
21-Nov-2023, 06:52 PM
Post your butterfly shots that you are most proud of, to showcase your hard work out in the field. Seek comments and feedback on how to get the best exposure, composition and digital workflow to make your shot better!
This sub-forum is for members to inform everyone about their outings and the butterflies observed, as well as recording checklists of butterflies in various locations
21-Nov-2023, 07:02 PM
Everything about photographing moths, learning how to ID them and other interesting information on moths
26-Jul-2023, 12:16 AM
Announcements, House Rules, Technical information & other administrative information on ButterflyCircle Forums
12-Oct-2022, 09:42 AM
19-Oct-2020, 10:16 PM
Everything about photographing dragonflies and damselflies, learning how to ID them and other interesting information on Odonata
Russet Percher @ Tai Po, Hong...
23-Nov-2014, 08:40 PM
Learn all about the myths and facts about bees and wasps, and how to ID and photograph them in the field.
25-Mar-2016, 09:43 PM
30-Jun-2019, 04:37 PM
There are currently 443 users online. 0 members and 443 guests
Most users ever online was 1,266, 19-Feb-2020 at 03:26 PM.
Welcome to our newest member, Yam Tim Wing