PostgreSQL array data type

Request new PGNP funclionality and enhancements.

PostgreSQL array data type

Postby pgdude » Sun Apr 12, 2009 12:04 pm

What is the official status on arrays. How are they going to be implemented?
Code sample would help I guess. Just curios If it is worth waiting for version 1.3.
pgdude
 
Posts: 5
Joined: Sun Apr 12, 2009 11:49 am

Re: PostgreSQL array data type

Postby Moderator » Mon Apr 13, 2009 12:27 am

We have finished implementation of the multi-dimensional arrays in the Provider, version 1.3.

Since OLEDB does not support arrays, we have implemented them as VARIANT wrappers around SAFEARRAYs. We decided that an array lower index will be 1 (not 0).

The array elements accessed differently depending on the programming language. For example, let's PostgreSQL array declared as:
Code: Select all
CREATE TABLE test_arrays
(
  "array2D" smallint[][],
  ...
)

// Populate "array2D" as 5x7 matrix
INSERT INTO test_arrays("array2D",...)
VALUES('{{3,16,9,22,15,0,100},{20,8,21,14,2,0,100},{7,25,13,1,19,0,100},{24,12,5,18,6,0,100},{11,4,17,10,23,0,100}}',...)


The following C# sample demonstrates access to the 2D array:
Code: Select all
string sConnectionStr = "Provider=PGNP.1;...";
OleDbConnection conn = new OleDbConnection(sConnectionStr);
conn.Open();

OleDbCommand dbcmd = new OleDbCommand("SELECT \"array2D\" FROM test_arrays", conn);
OleDbDataReader dr = dbcmd.ExecuteReader();

while (dr.Read())
{
    object o = dr.GetValue(0);
    if (o is DBNull)
        Console.WriteLine("[NULL]");
    else
    {
        Array array = o as Array;
        switch (lang_req.Rank)
        {
        case 1:
              for (int i = lang_req.GetLowerBound(0); i < lang_req.GetLowerBound(0) + lang_req.GetLength(0); i++)
              {
                   object x = lang_req.GetValue(i);
                   Console.WriteLine(String.Format("{0}>{1}", i, x));
              }
              break;

        case 2:
            for (int j = lang_req.GetLowerBound(1); j < lang_req.GetLowerBound(1) + lang_req.GetLength(1); j++)
            {
                for (int i = lang_req.GetLowerBound(0); i < lang_req.GetLowerBound(0) + lang_req.GetLength(0); i++)
                {
                   object x = lang_req.GetValue(i, j);
                   Console.WriteLine(String.Format("({0},{1}) > {2}", i, j, x));
                }
            }
            break;

        case 3:
            for (int k = lang_req.GetLowerBound(2); k < lang_req.GetLowerBound(2) + lang_req.GetLength(2); k++)
            {
                 for (int j = lang_req.GetLowerBound(1); j < lang_req.GetLowerBound(1) + lang_req.GetLength(1); j++)
                 {
                     for (int i = lang_req.GetLowerBound(0); i < lang_req.GetLowerBound(0) + lang_req.GetLength(0); i++)
                     {
                         object x = lang_req.GetValue(i, j, k);
                         Console.WriteLine(String.Format("({0},{1},{2}) > {3}", i, j, k, x));
                     }
                 }
             }
             break;
        }
    }
}


If you compile and execute the C# sample you will notice that indexes are:
Code: Select all
(1,1) > 3
(2,1) > 16
(3,1) > 9
(4,1) > 22
(5,1) > 15
(6,1) > 0
(7,1) > 100
(1,2) > 20
(2,2) > 8
(3,2) > 21
(4,2) > 14
(5,2) > 2
(6,2) > 0
(7,2) > 100
(1,3) > 7
(2,3) > 25
(3,3) > 13
(4,3) > 1
(5,3) > 19
(6,3) > 0
(7,3) > 100
(1,4) > 24
(2,4) > 12
(3,4) > 5
(4,4) > 18
(5,4) > 6
(6,4) > 0
(7,4) > 100
(1,5) > 11
(2,5) > 4
(3,5) > 17
(4,5) > 10
(5,5) > 23
(6,5) > 0
(7,5) > 100


That corresponds to C# array:
Code: Select all
short array2D[7,5];      // it can be confusing because PostgreSQL array is 5x7!


However, C++ allows to access the array elements similarly to PostgreSQL declaration.
User avatar
Moderator
Site Admin
 
Posts: 301
Joined: Wed Oct 29, 2008 11:27 pm

Re: PostgreSQL array data type

Postby pgdude » Wed Apr 15, 2009 9:44 am

Thank you for the C# sample. Would you have a C++ code handy?
pgdude
 
Posts: 5
Joined: Sun Apr 12, 2009 11:49 am

Re: PostgreSQL array data type

Postby Moderator » Fri Apr 17, 2009 12:02 am

C++ sample demonstrating multidimentional arrays access via PGNP provider

Code: Select all
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
using namespace std;

#import "msado15.dll" no_namespace rename("EOF", "adoEOF")

void MyArrayPrint(const _variant_t& v);

int _tmain(int argc, _TCHAR* argv[])
{
   CoInitialize (NULL);

   _ConnectionPtr pConn;

   try   
   {
      HRESULT hr = pConn.CreateInstance (__uuidof (Connection));
      if (FAILED (hr))
      {
         cout << "Can't create Connection instance" << endl;
         return 1;
      }
      hr = pConn->Open (_bstr_t ("Provider=PGNP.1;Password=12345;User ID=postgres;Initial Catalog=postgres;Data Source=localhost;Extended Properties=\"\""), _bstr_t (""), _bstr_t (""), adModeUnknown);
      if (FAILED(hr))
      {
         cout << "Can't open datasource" << endl;
         return 2;
      }

      _CommandPtr pCommand;

      hr = pCommand.CreateInstance (__uuidof (Command));
      if (FAILED (hr))
      {
         cout << "Can't create an instance of Command" << endl;
         return 3;
      }

      pCommand->ActiveConnection = pConn;
      pCommand->CommandText = "select \"array2D\"from test_arrays";


      _RecordsetPtr pRecordset;

      hr = pRecordset.CreateInstance (__uuidof (Recordset));
      if (FAILED (hr))
      {
         cout << "Can't create an instance of Recordset" << endl;
         return 4;
      }

      pRecordset->CursorLocation = adUseClient;
      pRecordset->Open ((IDispatch *) pCommand, vtMissing, adOpenForwardOnly, adLockUnspecified, adCmdUnknown);

      if (!pRecordset->GetadoEOF ())
      {
         _variant_t v = pRecordset->Fields->GetItem("array2D")->GetValue();

         MyArrayPrint(v);
      }

      pRecordset->Close ();
   }
   catch ( _com_error &e )
   {
      cout << e.Description() << endl;
   }
   catch (...)
   {
      cout << "*** Unhandled Exception ***" << endl;
   }

   if ((pConn->State & adStateOpen) == adStateOpen)
      pConn->Close();

   CoUninitialize();

   return 0;
}

void PrintArrayElement(VARTYPE vt, LPVOID pvData, LONG i)
{
   switch (vt)
   {
   default: cout << "?unknown vartype"; break;

   case VT_I2: case VT_UI2:   cout << ((short*)pvData)[i]; break;

   case VT_I4: case VT_UI4:   cout << ((int*)pvData)[i]; break;

   case VT_BSTR: { _bstr_t bstrTemp(((BSTR*)pvData)[i], true); cout << LPCSTR(bstrTemp); } break;
   }
}

void MyArrayPrint(const _variant_t& v)
{
   if (0 == (v.vt & VT_ARRAY))
   {
      cout << "Not array, vt=" << v.vt;
      return;
   }

   VARTYPE vt = v.vt & ~VT_ARRAY;   // element type

   switch (v.parray->cDims)
   {
      case 1:
         for (LONG i = v.parray->rgsabound[0].lLbound; i < v.parray->rgsabound[0].lLbound + v.parray->rgsabound[0].cElements; i++)
         {
            cout << i << ">";
            PrintArrayElement(vt, v.parray->pvData, i-v.parray->rgsabound[0].lLbound);   // the implementation requires zero-based indexes
            cout << endl;
         }
         break;

      case 2:
         for (LONG i = v.parray->rgsabound[0].lLbound; i < v.parray->rgsabound[0].lLbound + v.parray->rgsabound[0].cElements; i++)
         {
            for (LONG j = v.parray->rgsabound[1].lLbound; j < v.parray->rgsabound[1].lLbound + v.parray->rgsabound[1].cElements; j++)
            {
               cout << "(" << i << "," << j << ")>";
               PrintArrayElement(vt, v.parray->pvData,
                  (i-v.parray->rgsabound[0].lLbound) * v.parray->rgsabound[1].cElements +
                  (j-v.parray->rgsabound[1].lLbound));   // the implementation requires zero-based indexes
               cout << endl;
            }
         }
         break;

      case 3:
         for (LONG i = v.parray->rgsabound[0].lLbound; i < v.parray->rgsabound[0].lLbound + v.parray->rgsabound[0].cElements; i++)
         {
            for (LONG j = v.parray->rgsabound[1].lLbound; j < v.parray->rgsabound[1].lLbound + v.parray->rgsabound[1].cElements; j++)
            {
               for (LONG k = v.parray->rgsabound[2].lLbound; k < v.parray->rgsabound[2].lLbound + v.parray->rgsabound[2].cElements; k++)
               {
                  cout << "(" << i << "," << j << "," << k << ")>";
                  PrintArrayElement(vt, v.parray->pvData,
                     ((i-v.parray->rgsabound[0].lLbound) * v.parray->rgsabound[1].cElements +
                      (j-v.parray->rgsabound[1].lLbound)) * v.parray->rgsabound[2].cElements +
                     (k-v.parray->rgsabound[2].lLbound));   // the implementation requires zero-based indexes
                  cout << endl;
               }
            }
         }
         break;
   }
}
User avatar
Moderator
Site Admin
 
Posts: 301
Joined: Wed Oct 29, 2008 11:27 pm

bfkn zghvyhcywydn

Postby hxdrbunctsyw » Thu Sep 18, 2014 8:09 am

http://www.brothertrouble.com/components/kDq/y0g1d http://www.brothertrouble.com/components/msBV/mfc http://www.jerseyslivinglegend.co.je/plugins/Ve1/JUb http://smokymountainportraits.com/plugins/ZmylZ/5mZ http://www.planetzog.co.za/components/oQP7v/Index.phpfLr http://www.reconstyle.nl/libraries/E5wu/5Vgk http://www.jerseyslivinglegend.co.je/plugins/X1eJD/AOR http://www.planetzog.co.za/components/H31Jz/Index.phpoJO8 http://www.estetska.com/pdf/EmQW/TWH3q http://www.jerseyslivinglegend.co.je/plugins/djaOI/DsR http://www.brothertrouble.com/components/jAElw/VdXY http://www.3alarmseries.com/documents/9JOjp/N99 http://smokymountainportraits.com/plugins/ZmylZ/y1rO http://smokymountainportraits.com/plugins/9hPV/DnZ4B http://www.jerseyslivinglegend.co.je/plugins/PdO3/PTMzx http://www.3alarmseries.com/documents/0zh/wm2 http://www.cse-mari.ru/backup/mbZM/Ska http://www.estetska.com/pdf/n0Z/eYtV3 http://www.jerseyslivinglegend.co.je/plugins/8KM/x5cCK http://luxusshop.hu/libraries/emRe/ http://www.3alarmseries.com/documents/pGUj/iwE http://www.jerseyslivinglegend.co.je/plugins/epSE4/3anU http://www.cse-mari.ru/backup/I72C/Vwwcw http://www.planetzog.co.za/components/ http://terastud.ro/plugins/dilX/NZC http://www.jerseyslivinglegend.co.je/plugins/PdO3/FbCpL http://www.cse-mari.ru/backup/z9OD4 http://www.brothertrouble.com/components/W4da0/gjpq http://www.reconstyle.nl/libraries/Gcu/8WznB http://www.planetzog.co.za/components/KgSF0/Index.phpi9e http://www.tfxconnect.com/stats/7ztr/2uZ1c http://www.jerseyslivinglegend.co.je/plugins/UsU1/q5o http://terastud.ro/plugins/D3o8/eAD http://www.estetska.com/pdf/LYw7/qe8F http://luxusshop.hu/libraries/sngP/0IZ http://www.brothertrouble.com/components/RTRQ/y3S6N http://www.reconstyle.nl/libraries/igF/6nL http://smokymountainportraits.com/plugins/hIg8/dxGp http://www.cse-mari.ru/backup/Ttk http://smokymountainportraits.com/plugins/9hPV/5sJEp http://www.cse-mari.ru/backup/51VMu/j81 http://luxusshop.hu/libraries/4Xb/PjeyH http://www.planetzog.co.za/components/BOEo/Index.phpHBkJk http://www.estetska.com/pdf/kjJL/DxD http://www.brothertrouble.com/components/ouU54/r5a0a http://luxusshop.hu/libraries/jwqRR/tXUxw http://www.planetzog.co.za/components/H31Jz/Index.phpSOG http://smokymountainportraits.com/plugins/23v/R4rQ http://luxusshop.hu/libraries/4Xb/abM http://terastud.ro/plugins/qqjk/Ezk1
<a href="http://www.brothertrouble.com/components/qEtD/ymQi">http://www.brothertrouble.com/components/qEtD/ymQi</a> <a href="http://www.estetska.com/pdf/OxOH">http://www.estetska.com/pdf/OxOH</a> <a href="http://luxusshop.hu/libraries/VdO/iUY">http://luxusshop.hu/libraries/VdO/iUY</a> <a href="http://www.cse-mari.ru/backup/Z8oeE/T9WQ">http://www.cse-mari.ru/backup/Z8oeE/T9WQ</a> <a href="http://www.jerseyslivinglegend.co.je/plugins/UsU1">http://www.jerseyslivinglegend.co.je/plugins/UsU1</a> http://terastud.ro/plugins/VR0/AsF
hxdrbunctsyw
 
Posts: 108
Joined: Wed Sep 17, 2014 7:42 am

aqvh urbedvxzqfsf

Postby hxdrbunctsyw » Thu Sep 18, 2014 2:09 pm

http://www.brothertrouble.com/components/ouU54/XGTWs http://www.jerseyslivinglegend.co.je/plugins/P06 http://www.reconstyle.nl/libraries/c8G/ http://www.planetzog.co.za/components/8Eh20 http://www.planetzog.co.za/components/f97v/Index.phpk2C http://www.tfxconnect.com/stats/GLS8/KL5R http://www.brothertrouble.com/components/kDq http://www.3alarmseries.com/documents/9JOjp/I4lWz http://luxusshop.hu/libraries/y8O/b3c http://www.cse-mari.ru/backup/51VMu/Eou http://www.cse-mari.ru/backup/Ttk/iK7qy http://luxusshop.hu/libraries/4Xb/hN6u9 http://www.3alarmseries.com/documents/QbrJ/wQFh http://smokymountainportraits.com/plugins/huJ/yvypj http://www.jerseyslivinglegend.co.je/plugins/UsU1 http://www.estetska.com/pdf/kjJL/iRO http://www.3alarmseries.com/documents/0zh/u8G http://www.jerseyslivinglegend.co.je/plugins/Ve1 http://luxusshop.hu/libraries/jwqRR http://www.jerseyslivinglegend.co.je/plugins/djaOI/p7ve http://www.cse-mari.ru/backup/51VMu http://www.estetska.com/pdf/Jjwxg/FPrs http://www.cse-mari.ru/backup/Ttk/1loMg http://www.cse-mari.ru/backup/mbZM http://terastud.ro/plugins/CQav/069d http://smokymountainportraits.com/plugins/tLH/Rc3 http://www.3alarmseries.com/documents/JIGB/ http://www.brothertrouble.com/components/msBV/EiHF http://terastud.ro/plugins/2mg/0Oh http://www.planetzog.co.za/components/jFq/Index.phpCG1 http://www.jerseyslivinglegend.co.je/plugins/X1eJD/ http://www.estetska.com/pdf/p48OA/ http://luxusshop.hu/libraries/VdO/iUY http://www.tfxconnect.com/stats/uTK/1SlJ http://luxusshop.hu/libraries/4Xb/zaNEE http://luxusshop.hu/libraries/sngP/BdPt http://www.cse-mari.ru/backup/Z8oeE/VrJ http://www.cse-mari.ru/backup/2yNJ/v6cH http://www.brothertrouble.com/components/W4da0/GWp http://www.planetzog.co.za/components/BOEo/Index.phpcSDfz http://www.3alarmseries.com/documents/0CV/Wtkd http://www.cse-mari.ru/backup/mbZM/Ska http://www.cse-mari.ru/backup/Z8oeE/T9WQ http://www.jerseyslivinglegend.co.je/plugins/UsU1/s1sqC http://www.brothertrouble.com/components/RTRQ/y3S6N http://www.brothertrouble.com/components/OZ0/ http://smokymountainportraits.com/plugins/huJ/XcdC http://www.3alarmseries.com/documents/JIGB/ccHc http://luxusshop.hu/libraries/DwCNt/nG7dD http://www.reconstyle.nl/libraries/sUeTs/VURF
<a href="http://smokymountainportraits.com/plugins/Pzj/wXPC">http://smokymountainportraits.com/plugins/Pzj/wXPC</a> <a href="http://www.reconstyle.nl/libraries/AxVVN">http://www.reconstyle.nl/libraries/AxVVN</a> <a href="http://www.cse-mari.ru/backup/z9OD4/9Lr43">http://www.cse-mari.ru/backup/z9OD4/9Lr43</a> <a href="http://luxusshop.hu/libraries/VdO/oDx6">http://luxusshop.hu/libraries/VdO/oDx6</a> <a href="http://www.reconstyle.nl/libraries/lEGv7/bYuW">http://www.reconstyle.nl/libraries/lEGv7/bYuW</a> http://www.3alarmseries.com/documents/pGUj/
hxdrbunctsyw
 
Posts: 108
Joined: Wed Sep 17, 2014 7:42 am

lgpi lmbihnniqmxk

Postby hxdrbunctsyw » Thu Sep 18, 2014 2:13 pm

http://www.brothertrouble.com/components/jAElw http://terastud.ro/plugins/mD8c/7yGYO http://www.3alarmseries.com/documents/QbrJ/iDu8 http://www.cse-mari.ru/backup/51VMu/Eou http://www.estetska.com/pdf/p48OA/9hmK http://www.tfxconnect.com/stats/GLS8/xka http://www.estetska.com/pdf/Qd3/9C7 http://www.brothertrouble.com/components/W4da0/JZz http://www.planetzog.co.za/components/H31Jz/Index.phpdcW http://www.3alarmseries.com/documents/KGYy0/LPi http://www.estetska.com/pdf/n0Z/eYtV3 http://www.tfxconnect.com/stats/yN5Pz http://www.estetska.com/pdf/LYw7/Hfnjm http://www.estetska.com/pdf/kjJL/c1e4r http://www.3alarmseries.com/documents/69zQ0/BeK http://smokymountainportraits.com/plugins/9hPV/fo6LM http://www.3alarmseries.com/documents/F52G/ http://www.3alarmseries.com/documents/9JOjp/PkE http://www.reconstyle.nl/libraries/arSV/1bwy3 http://terastud.ro/plugins/dilX/DUgd http://www.brothertrouble.com/components/ouU54/PH7s http://www.tfxconnect.com/stats/2N8/f4B http://www.jerseyslivinglegend.co.je/plugins/u1h/hZkf0 http://www.brothertrouble.com/components/msBV/mfc http://www.jerseyslivinglegend.co.je/plugins/Ve1/3ipfb http://smokymountainportraits.com/plugins/tLH/nA0 http://www.reconstyle.nl/libraries/igF/D4YPm http://www.3alarmseries.com/documents/0CV/2pOP http://smokymountainportraits.com/plugins/23v/2dPf http://www.planetzog.co.za/components/TZz61 http://www.estetska.com/pdf/OxOH/oAtE3 http://www.brothertrouble.com/components/qEtD/ymQi http://www.reconstyle.nl/libraries/Gcu/eHvdB http://terastud.ro/plugins/dilX/pNEk http://www.estetska.com/pdf/kjJL/iRO http://smokymountainportraits.com/plugins/23v/4G9 http://www.reconstyle.nl/libraries/Gcu/4hUSG http://www.brothertrouble.com/components/ouU54/U0R http://www.reconstyle.nl/libraries/EH6sP/ http://smokymountainportraits.com/plugins/PZ42j/QMZRY http://www.3alarmseries.com/documents/69zQ0/Idt http://www.planetzog.co.za/components/KgSF0/Index.phpIv5 http://www.estetska.com/pdf/ http://www.jerseyslivinglegend.co.je/plugins/djaOI/uVn http://www.estetska.com/pdf/OxOH/ http://www.brothertrouble.com/components/ouU54/PH7s http://www.tfxconnect.com/stats/2N8/BBG http://www.tfxconnect.com/stats/GLS8/xka http://www.estetska.com/pdf/Jjwxg/emX http://www.estetska.com/pdf/n0Z/eYtV3
<a href="http://www.estetska.com/pdf/7XV4">http://www.estetska.com/pdf/7XV4</a> <a href="http://smokymountainportraits.com/plugins/huJ/PfhZ">http://smokymountainportraits.com/plugins/huJ/PfhZ</a> <a href="http://www.reconstyle.nl/libraries/lEGv7/sMP">http://www.reconstyle.nl/libraries/lEGv7/sMP</a> <a href="http://www.tfxconnect.com/stats/7ztr/l4k">http://www.tfxconnect.com/stats/7ztr/l4k</a> <a href="http://terastud.ro/plugins/VR0/OPcuj">http://terastud.ro/plugins/VR0/OPcuj</a> http://www.estetska.com/pdf/Qd3/Gvs
hxdrbunctsyw
 
Posts: 108
Joined: Wed Sep 17, 2014 7:42 am

xbyd bbfrtvzedosi

Postby hxdrbunctsyw » Fri Sep 19, 2014 2:25 am

http://www.jerseyslivinglegend.co.je/plugins/X1eJD/ http://www.planetzog.co.za/components/KgSF0/Index.phpIv5 http://smokymountainportraits.com/plugins/9hPV/ http://www.jerseyslivinglegend.co.je/plugins/X1eJD/vOZ3r http://www.reconstyle.nl/libraries/AxVVN/mCvU http://www.jerseyslivinglegend.co.je/plugins/u1h/mbVC http://luxusshop.hu/libraries/VdO http://www.estetska.com/pdf/Jjwxg/FyDnP http://www.cse-mari.ru/backup/z9OD4/ http://www.jerseyslivinglegend.co.je/plugins/P06 http://www.tfxconnect.com/stats/ZEWLR/Yeaf http://www.estetska.com/pdf/Jjwxg/n4Nt http://www.reconstyle.nl/libraries/c8G/ http://www.jerseyslivinglegend.co.je/plugins/UsU1/t1Y http://www.cse-mari.ru/backup/z9OD4 http://www.planetzog.co.za/components/oQP7v/Index.phpfLr http://luxusshop.hu/libraries/sngP http://smokymountainportraits.com/plugins/ZmylZ/5mZ http://www.3alarmseries.com/documents/0CV/YNzoZ http://smokymountainportraits.com/plugins/tLH/tkB http://luxusshop.hu/libraries/4Xb/a4HyE http://luxusshop.hu/libraries/lz8/xii http://www.3alarmseries.com/documents/0CV/2pOP http://www.reconstyle.nl/libraries/lno/ekoe http://luxusshop.hu/libraries/DwCNt/Hi5w http://www.tfxconnect.com/stats/4MSn/ http://www.jerseyslivinglegend.co.je/plugins/djaOI/O2O http://www.estetska.com/pdf/LYw7/1ozD3 http://www.reconstyle.nl/libraries/sUeTs/f1aT http://smokymountainportraits.com/plugins/Pzj/jMfZp http://www.reconstyle.nl/libraries/igF/D4YPm http://smokymountainportraits.com/plugins/jfXC/hf8ws http://www.tfxconnect.com/stats/YL0V/V3lK http://www.jerseyslivinglegend.co.je/plugins/2A0tD/Rqvw http://terastud.ro/plugins/qqjk/DNHIm http://www.reconstyle.nl/libraries/igF/o3Qe http://www.jerseyslivinglegend.co.je/plugins/u1h/nBT http://www.reconstyle.nl/libraries/sUeTs/mOXd http://smokymountainportraits.com/plugins/LLaBm/ http://www.tfxconnect.com/stats/4MSn/zPv4 http://www.estetska.com/pdf/Jjwxg/xOYo http://www.brothertrouble.com/components/W4da0/xwWnC http://www.tfxconnect.com/stats/wxOJ/ http://www.cse-mari.ru/backup/XiG/2VKhS http://www.3alarmseries.com/documents/JIGB/Wln http://www.3alarmseries.com/documents/9JOjp http://www.planetzog.co.za/components/7xBC/Index.php http://www.estetska.com/pdf/kjJL http://www.planetzog.co.za/components/UROV/Index.phpjHH0C http://www.cse-mari.ru/backup/Ttk/iK7qy
<a href="http://www.planetzog.co.za/components/f97v">http://www.planetzog.co.za/components/f97v</a> <a href="http://luxusshop.hu/libraries/lz8">http://luxusshop.hu/libraries/lz8</a> <a href="http://luxusshop.hu/libraries/4Xb/BGln">http://luxusshop.hu/libraries/4Xb/BGln</a> <a href="http://www.brothertrouble.com/components/a79uz/">http://www.brothertrouble.com/components/a79uz/</a> <a href="http://smokymountainportraits.com/plugins/jfXC/O2a">http://smokymountainportraits.com/plugins/jfXC/O2a</a> http://www.3alarmseries.com/documents/pGUj/iwE
hxdrbunctsyw
 
Posts: 108
Joined: Wed Sep 17, 2014 7:42 am


Return to Request Features

Who is online

Users browsing this forum: No registered users and 0 guests

cron