Saturday, March 30, 2013

[how to] Executing sys.dm_fts_parser without sysadmin server role

[how to] Executing sys.dm_fts_parser without sysadmin server role


Executing sys.dm_fts_parser without sysadmin server role

Posted: 30 Mar 2013 08:41 PM PDT

A web application needs to execute sys.dm_fts_parser to discover which words SQL Server Fulltext Search used to match documents for the purpose of syntax highlighting. That stored procedure can only be executed if the caller is in the sysadmin server role.

Permissions

Requires membership in the sysadmin fixed server role and access rights to the specified stoplist.

http://msdn.microsoft.com/en-us/library/cc280463%28v=sql.105%29.aspx

Since it would be most unwise to grant that server role to the web server's user, I attempted to create a stored procedure that runs as a separate user that is in that role.

create procedure usp_fts_parser      @query nvarchar(max)  with execute as owner  as  select display_term from sys.dm_fts_parser(@query, 1033, 0, 0);  go  

I then created a user login_sign_fts_parser, made it the owner of the stored procedure

alter authorization on usp_fts_parser to login_sign_fts_parser

and attempt to allow the web server's DB user rights to impersonate that user:

GRANT IMPERSONATE ON USER::[IIS APPPOOL\Strategic Window] TO login_sign_fts_parser

When I attempt to execute usp_fts_parser, I receive the error:

Cannot execute as the database principal because the principal "login_sign_fts_parser" does not exist, this type of principal cannot be impersonated, or you do not have permission.

Why do I get this error? How can I accomplish my goal of executing sys.dm_fts_parser without granting undue permissions to the web server's DB user?

Cannot create perlplu function

Posted: 30 Mar 2013 05:01 PM PDT

Running PostgreSQL 9.1.8 on Xubuntu 12.04, installed from the repos.

From the shell, I have executed:

createlang plperl db_name;  createlang plperlu db_name;  

As the superuser running psql, I have executed:

GRANT ALL ON LANGUAGE plperl TO account_name;  GRANT ALL ON LANGUAGE plperlu TO account_name;  

The pg_language table reveals:

select lanname,lanpltrusted from pg_language where lanname like 'plperl%';    "plperl";t  "plperlu";t  

When I create the following function:

CREATE OR REPLACE FUNCTION get_hostname()    RETURNS text AS  $BODY$    use Sys::Hostname;    return hostname;  $BODY$    LANGUAGE plperlu IMMUTABLE    COST 1;  ALTER FUNCTION get_hostname()    OWNER TO account_name;  

I receive the following error:

ERROR:  Unable to load Sys/Hostname.pm into plperl at line 2.  BEGIN failed--compilation aborted at line 2.  CONTEXT:  compilation of PL/Perl function "get_hostname"  

Yet the following works:

CREATE OR REPLACE FUNCTION get_hostname()    RETURNS text AS  $BODY$    return '127.0.0.1';  $BODY$    LANGUAGE plperlu IMMUTABLE    COST 1;  ALTER FUNCTION get_hostname()    OWNER TO account_name;  

The following Perl script works as expected from the shell:

use Sys::Hostname;  print hostname;  

I tried to run the function as an anonymous block:

DO $$    use Sys::Hostname;    print hostname;  $$ LANGUAGE plperlu;  

This returned the same error as before, with this additional information:

ERROR: Unable to load Sys/Hostname.pm into plperl at line 3.  BEGIN failed--compilation aborted at line 3.  SQL state: 42601  Context: PL/Perl anonymous code block  

From the documentation, error 42601 is a syntax error.

I see no syntax error.

Furthermore, the function loaded fine with the superuser account when I imported the database:

psql -d db_name -U account_name -W -f db-dump.sql > import.log 2> error.log  

I tried to simplify the code to no avail:

CREATE OR REPLACE FUNCTION get_hostname() RETURNS text AS  $$    use Sys::Hostname;    return hostname;  $$  LANGUAGE plperlu;  

Same error as before.

What I don't understand is why, according to the error message, PostgreSQL is trying to load the code into plperl instead of plperlu.

Any ideas?

Update #1

Note that the postgres user is a Superuser:

                             List of roles   Role name |                   Attributes                   | Member of   -----------+------------------------------------------------+-----------   postgres  | Superuser, Create role, Create DB, Replication | {}  

How do I design a database for a resource scheduling and allocation application?

Posted: 30 Mar 2013 02:39 PM PDT

I have two entities: Resource and Project. A Project runs for a certain amount of time (in calendar days), and I need to allocate several Resources to it (allocation interval - 1 work day, not an hourly basis).

Now if I create two tables (resource and project), how do I achieve this? How should the tables be designed? Do I create a new entry for every day and resource?

Any help is much appreciated!

Retrieving Alternating Values

Posted: 30 Mar 2013 07:39 PM PDT

I have a column with two values in my database, I want to retrieve the two values alternately, for example I have:

name   itemcode  ----------   A       1   B       2   C       2   D       2   E       1   F       1  

I want to display them as:

name itemcode  ----------  A      1  B      2  E      1  C      2  F      1  D      2  

Getting next and previous document

Posted: 30 Mar 2013 09:53 AM PDT

In a mongo collection I have a list of words (millions words).

{word:'a'}  {word:'b'}  {word:'x'}  {word:'y'}  {word:'z'}  

I need to get lexical adjacent of a word. I am looking for most efficient method.

Database design - do I need another table?

Posted: 30 Mar 2013 06:18 PM PDT

I am trying to make a database that follows a form that the company uses. When a client walks in the membes of staff have to fill in a form and the data is recorded. The form on paper is 10 pages long. The first time a client is seen the entire form is filled in and the client gets a clientID.

I have split the form into sections that make sense like accommodation and employment. I know I can link these tables together with the clientsID. Thats the simple part.

Now when a client returns the form comes out again but this time only certain parts are filled in, what ever the clients needs are. The records for most parts don't need updating but a new record needs inserting. what would be the best way around this.

So at the moment I have for example a table called client with an id and name another table called accommodation with clientid and address and another table employment with clientid and employer.

But how do I go about it when a client comes in to let us know he has a new employer. I cant update the current one as that is needed but I would need to add new record for the client.

Would this mean I would have to add a look up table for all my current tables?

mysqlworkbench after cmd mysql startup went wrong

Posted: 30 Mar 2013 05:18 PM PDT

i have problems with my mysql server. I have installed the newest mysqlserver but having problems after starting my server from command line on localhost. Before that i was running xammp. The problem is that when starting from command line and not from xammp, mysqlworkbench shows me tables from another datadir when connecting with database . I really don't know how to fix my problem.

Insert from one row to another using cases

Posted: 30 Mar 2013 01:38 PM PDT

My original table was(being used since 2005):

CREATE TABLE `request` (      `msg` VARCHAR(150) NOT NULL,      `id` VARCHAR(20) NOT NULL,      `ctg` VARCHAR(10) NOT NULL DEFAULT 'misc',      `date` VARCHAR(25) NULL DEFAULT NULL,      `status` VARCHAR(10) NOT NULL DEFAULT 'empty',      `fid` BIGINT(20) NOT NULL AUTO_INCREMENT,      PRIMARY KEY (`fid`),      UNIQUE INDEX `msg_id` (`msg`, `id`),      UNIQUE INDEX `msg_ctg` (`msg`, `ctg`)  )  COLLATE='utf8_general_ci'  ENGINE=MyISAM  CHECKSUM=1  AUTO_INCREMENT=18491;  

Since, it was neither good management of table nor appreciable by me, I created a newer table:

CREATE TABLE `requests` (      `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,      `ctg` VARCHAR(15) NOT NULL,      `msg` VARCHAR(250) NOT NULL,      `nick` VARCHAR(32) NOT NULL,      `filled` ENUM('Y','N') NOT NULL DEFAULT 'N',      `dated` DATETIME NOT NULL,      `filldate` DATETIME NULL DEFAULT NULL,      `filledby` VARCHAR(32) NULL,      PRIMARY KEY (`id`),      UNIQUE INDEX `nick_msg` (`nick`, `msg`),      UNIQUE INDEX `ctg_msg` (`ctg`, `msg`)  )  COMMENT='Requests from users in any of the categories.'  COLLATE='utf8_general_ci'  ENGINE=MyISAM;  

What I want to do now is:

SELECT data from first table and insert as follows:

  • msg to msg, id to nick, ctg to ctg and date to dated are copied as is.
  • status in original table is either empty or filled. I want to use a CASE clause while insertion so that Y and N are inserted accordingly.

My query:

INSERT INTO `requests`( `id`, `ctg`, `msg`, `nick`, `dated`, `filled` )  SELECT `fid`,      `ctg`,       `msg`,       `id`,       `date`,      CASE          WHEN `status` = 'empty' THEN 'N'          WHEN `status` = 'filled' THEN 'Y'      END CASE  FROM `request`  

My question is

Is the query above perfect? Also, one of the sample string from request table with 'filled' status is like:

.hack//SIGN (filled by hjpotter92 in 02/08/12 09:47:07 )  

the format is the same: filled by <<nick>> in <<<date>> in <<mm/dd/yy H:I:S>> for all filled entries. Can I extract the date from there and use it with STR_TO_DATE() to pass it in filldate field too? I know it'd need me to create a procedure/function.

For now, I am thinking of using PHP for the task but I wanted a clean MySQL solution if possible.

Understanding MySQL Integer Types?

Posted: 30 Mar 2013 03:39 PM PDT

Please could someone explain to me how the MySQL integer types and lengths work as it is somewhat confusing.

Which different integer types and lengths should I use for each of the following ranges to keep them as efficient as possible?

0 - 1  0 - 700,000  0 - 9,999,999,999  

What is the difference between TINYINT(5), SMALLINT(5) and INT(5), are they the same?

mysql trigger on update with insert statement

Posted: 30 Mar 2013 10:16 AM PDT

I am trying to create a simple trigger which is handled on update operations. The trigger is checking before update if a record of an update exists, then if not it is created.

DELIMITER ;;  CREATE TRIGGER trig  BEFORE UPDATE ON table  FOR EACH ROW  BEGIN  IF old is null then  INSERT INTO table(table.col1, table.col2) VALUES ('new.table.col1','new.table.col2');  END IF;  END;  ;;  DELIMITER ;  

Why is it not adding a record if update is trying to update some non existing record?

How to Shrink Oracle SYSTEM Tablespace?

Posted: 30 Mar 2013 02:32 PM PDT

SYSTEM Tablespace grow out of control because of SYS.AUD$ table.

SYS.AUD$ truncated but datafile still very big= 30G

Resize doesn't work because

file contains used data beyond requested RESIZE value

What should I do here?

Oracle trigger to update columns daily

Posted: 30 Mar 2013 11:14 AM PDT

I'm trying to create a trigger that would run twice daily and do updates based on a specific condition.

To be run on Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi

We have Table A and Table B with columns

  1. Primary Key
  2. Date 1
  3. Date 2
  4. Date 3
  5. Status

For a specified set of Primary Keys in Table A, until Table A.Status==Completed, I want the Date fields to be copied over from Table B to Table A twice daily. The same primary keys will be already setup in Table B. The number of records to update will decrease over time as more records in the primary keys list reach completed status.

The purpose is to maintain certain static values on the Date fields till status==completed. We are unable to control an external system that keeps over-writing them. As a stopgap we want to rewrite them at frequent intervals to have the notion of maintaining static values. Once all PKs in our list reach completed status, we want to turn off the trigger.

Run Multiple Postgres Server

Posted: 30 Mar 2013 02:58 PM PDT

Hello I am new to postgres, i wanted to run postgres v8.3 and v9.1 same at a time, but don't know how..

anyone help me how to do it simply.

How do I fix the definer problem The user specified as a definer ('fred'@'192.168.0.%') does not exist

Posted: 30 Mar 2013 05:04 PM PDT

I dumped an existing database from my web site into a new MySQL setup on my laptop. Everything works except pages that use a view, when the error message above appears. There is only one view on the system. I assumed that this was caused because the user was not in the system, but looking in the users database of MySQL the user is listed correct with the password.

The dump was from an earlier version of MySQL (5.0) into the latest one that comes with Xamp 5.527. At first I thought it could be that the latest version was incompatible with the existing one.

Looking on this forum, there are some existing answers covering this problem that refer to making changes to the database and then dumping it again.

However, my on line database works fine, so I dare not make changes to it in case I kill it. That is assuming that I understood what changes I should make and how to do it. I have PHPmyadmin. Can I modify it on the existing dumped database,or do I have to change it on the on line one and then export it?

And exactly what do I need to do to modify it. The original database was a Microsoft Access one, converted to MySQL, and it has worked without error since 2003.

SQL Server update query on linked server causing remote scan

Posted: 30 Mar 2013 08:01 PM PDT

I have a SQL Server 2012 setup as a linked server on a SQL Server 2008 server.

The following queries executes in less than 1 second:

   SELECT kg.IdGarment     FROM Products p      INNER JOIN ZAMStaffRentals r ON r.ProductID = p.UniqueID      INNER JOIN ZAMCustomer_Staff s ON r.StaffID = s.UniqueID      INNER JOIN ZAMRentalGarments g ON g.StaffRentalID = r.UniqueID      INNER JOIN [REMOTE_SERVER].[REMOTE_DB].dbo.t_ProcessIT_Garment kg on g.BarcodeRFID = kg.IdGarment      INNER JOIN ZAMKannChanges log on log.GarmentID = g.UniqueID      WHERE log.ActionType = 'I'   

t_ProcessIT_Garment contains 37,000 rows, the query returns two records, the IdGarment column is the Primary Key. No problem here.

However, if I run this query to do a remote update, it takes 24 seconds, and 2 rows is affected:

   UPDATE [REMOTE_SERVER].[REMOTE_DB].dbo.t_ProcessIT_Garment SET      IdGarment = IdGarment     FROM Products p      INNER JOIN ZAMStaffRentals r ON r.ProductID = p.UniqueID      INNER JOIN ZAMCustomer_Staff s ON r.StaffID = s.UniqueID      INNER JOIN ZAMRentalGarments g ON g.StaffRentalID = r.UniqueID      INNER JOIN [REMOTE_SERVER].[REMOTE_DB].dbo.t_ProcessIT_Garment kg on g.BarcodeRFID = kg.IdGarment      INNER JOIN ZAMKannChanges log on log.GarmentID = g.UniqueID      WHERE log.ActionType = 'I' ;  

I tested using IdGarment = IdGarment to keep things simple. The execution plan shows it uses Remote Query for the first query, but Remote Scan for the second query, which has 100% of the cost.

The table joins are identical in both queries, why is it using Remote Scan for the second query, and how do I fix this?

Mysql - How to optimize retrival time in a table

Posted: 30 Mar 2013 06:04 PM PDT

I have query like this! which has 200 million Records in a single table.. I am using BTree Indexes in my table...

mysql> select COUNT(DISTINCT id) from [tablename] where [columname] >=3;
+------------------------------+
| COUNT(DISTINCT id) |
+------------------------------+
| 8242063
+------------------------------+
1 row in set (3 min 23.53 sec)

I am not satisfy with this timing ..! how can I reduce the result time less than 30sec. Kindly give me any suggessions! It will be more helpful to me!

thanking you!

MySQL specific database configuration file

Posted: 30 Mar 2013 01:58 PM PDT

In MySQL's configuration file I've globally disabled autocommit as so.

[mysqld]  autocommit=0  

I need to turn MySQL's autocommit on for a specific Ruby on Rails database though. It could be for the user or the database itself (doesn't matter). Thinking it would look something like this.

[mysqld]  autocommit=0  execute_sql="Custom SQL to set autocommit for a database"  

SQL Server 2005 Replication

Posted: 30 Mar 2013 04:58 PM PDT

I am in the process of creating Replication between 2 Remote Servers, server 1 is the Distributor and Publisher and server 2 is the Subscription.

server 1 windows 2003 server 192.168.10.1 connected by vpn SQL Server 2005 domain1.local

server 1  windows 2003 server  192.168.10.1 connected by vpn  SQL Server 2005  domain1.local  

server 2 windows 2003 server 192.168.10.6 connected by vpn SQL Server 2005 domain2.local

server 2  windows 2003 server  192.168.10.6 connected by vpn  SQL Server 2005  domain2.local  

When I setup up Replication everything looked fine until I looked at the sync status and it said:

The Agent could not be started    An exception occurred while executing a transact-sql statement or batch    sqlserveragent error request to run job  server1-username blah blah blah  

From user sa refused because the job is already running from a request by user sa changed database context to technical error 22022.

I have cleared jobs in the server agent as well as restarted the service.

Could this be something to do with authentication between two non trusted domains as I can browse and even control each sql server via SQL studio but just not setup replication?

Yes I can manage each SQL Server in SSMS and we are using merge with snapshot.

Mysqldump tables excluding some fields

Posted: 30 Mar 2013 12:58 PM PDT

Is there a way to mysqldump a table without some fields?

Let me explain:
I have a MySQL database called tests. In tests I have 3 tables: USER, TOTO and TATA. I just want to mysqldump some fields of table USER, so excluding some fields like mail, ip_login, etc.

How can I do this?

How to do something like UPDATE DELAYED in MySQL

Posted: 30 Mar 2013 02:58 PM PDT

I have an averages table that should keep track of an average value over time. I don't want to have a row for each value, just a single row that continuously updates the average. What I've come up with is this:

set @value=4;  set @name="myAverageValue";  UPDATE `timing` SET    `max` = greatest(`max`,@value),    `average` = `average` + ((@value - `average`) / (`count` + 1)),    `count` = `count` + 1  WHERE `name` = @name  

Many clients may be doing this at the same time, and I don't want there to be any locking issues. I don't care what order the updates are run in, since in the end it will all end up the same. I just want to have a query that sends the UPDATE to the database, and it will process it eventually, similar to an INSERT DELAYED. Does UPDATE LOW_PRIORITY do this, or does that cause the client to wait until it is available?

SQL Server 2012 database backup successfully report but no backup file

Posted: 30 Mar 2013 07:58 PM PDT

enter image description here

I have created maintenance plan in SQL Server 2012. And every day, the maintenance plan should backup the database. There is no database backup file when I look in the folder where the backups must be stored. But SQL Server logs history about this maintenance plan are successful.

What is the problem?

I am using SQL Server 2012. The operating system is Windows Server 2008 R2.

Thank you for paying attention.

enter image description here

Sybase SQL Anywhere 12 - Get all indexes which are unique -> ambigious sysindexes error

Posted: 30 Mar 2013 06:58 AM PDT

we are using a Sybase SQL Anywhere 12 db.

In the db there are indices, which are unique, but shouldn't be unique.

Therefore I search for a quick way to list all tables with unique primary keys.

I tried

SELECT z.name FROM sysobjects z JOIN sysindexes ON (z.id = i.id) WHERE type = 'U'  

The result was an error message: Anweisung konnte nicht ausgeführt werden. Tabellenname 'sysindexes' ist mehrdeutig SQLCODE=-852, ODBC 3-Status="42S13" Zeile 1, Spalte 1

Roughly translated: sysindex is ambiguous.

I found on internet the query:

select 'Table name' = object_name(id),'column_name' = index_col(object_name(id),indid,1),  'index_description' = convert(varchar(210), case when (status & 16)<>0 then 'clustered' else 'nonclustered' end  + case when (status & 1)<>0 then ', '+'ignore duplicate keys' else '' end  + case when (status & 2)<>0 then ', '+'unique' else '' end  + case when (status & 4)<>0 then ', '+'ignore duplicate rows' else '' end  + case when (status & 64)<>0 then ', '+'statistics' else case when (status & 32)<>0 then ', '+'hypothetical' else '' end end  + case when (status & 2048)<>0 then ', '+'primary key' else '' end  + case when (status & 4096)<>0 then ', '+'unique key' else '' end  + case when (status & 8388608)<>0 then ', '+'auto create' else '' end  + case when (status & 16777216)<>0 then ', '+'stats no recompute' else '' end),  'index_name' = name  from sysindexes where (status & 64) = 0  order by id  

Which looked what i wanted. But there was still the same result of ambigious sysindexes.

What dows ambigious indexes mean in this context? Will/Can this cause any error in future?

As workaround I used sybase central (which by the way opens always on first monitor, not on the one where it was closed - ugly behaviour), and found that a item indices showed what i searched for.

But I still want to know how a programmatically solution looks like.

Replication master binlog rotation when network is unavailable

Posted: 30 Mar 2013 03:58 PM PDT

I recently experienced an issue where the binlog file in master rotated because network connectivity between the slave and master was unavailable.

After solving the network issue, the slave was not able to follow the master as it was doing through previous binlog and position.

That was solved by purging the binlog to last binlog in master and pointing the slave to that last binlog and previous binlog's position which was following.

I am wondering if this issue is normal?

Issues installing SQL Server 2008 on Windows Server 2008 R2

Posted: 30 Mar 2013 09:58 AM PDT

I am trying to install SQL Server 2008 on Windows Server 2008 R2 Cluster. While installing the first node, I keep on getting the following error:

TITLE: Microsoft SQL Server 2008 Setup
The following error has occurred:
Attempted to perform an unauthorized operation.
Click 'Retry' to retry the failed action, or click 'Cancel' to cancel this action and continue setup.

Has anyone seen this issue before? I have uninstalled it multiple times and tried re-installing it but same results.

Take individual MySQL database offline

Posted: 30 Mar 2013 06:58 PM PDT

MySQL does not have any SQL commands or internal mechanisms for

  • making an individual database unavailable / offline
  • moving an individual database

Thtis being the case, how can you take an individual database offline?

Choosing shard key and friendly URL Ids for my MongoDB

Posted: 30 Mar 2013 08:58 PM PDT

I have decided to use MongoDB as my Database for a web application. However, I have some difficulties to get started and I hope that you can help me out with a few questions.

I am developing my application in ASP.NET and with MongoDB as the back-end. I intend to start with a single server + 1 replication but wanted to built it right so I won't have problem sharding the database in the future if I have to.

One of my biggest problems is choosing the right shard key and friendly URLs for my website.

I have a folders collection and files as embedded collection inside the folders collection. Each user can create any number of folders and add files to it. Each folder belongs to one user. I wanted to know what is the best shard key for this type of collection? Many queries will query by the user, getting the folder and its items by querying the folders collection by its unique id. I will also use the id in the URL to get the folder and its filers: ex. mywebsite.com/folder/[the_id_of_the_folder]

I will also will use paging in my application, so I need to query the data (also in a sharded environment) and get for example: the last 10 records, page 2 with 10 records - all ordered by the last time the were inserted/updated

  • So my first question is what is the best shard key to use for a single machine, but considering that I will have to shard in the future
  • Does the shard key has to be the primary unique id of the document in MongoDB?
  • How can I generate more user friendly URLs - I prefer a numerical value instead of GUID (is there option to convert it?)

Help will be very appreciated, as I am stuck and can continue until I solve this.

Mongo connection failing with 'Transport endpoint is not connected'

Posted: 30 Mar 2013 08:58 AM PDT

I have a 2 server installation.

A web server with Apache and a DB server with MongoDB.

I am load testing it, and on ~300 RPS I am getting this error:

PHP Fatal error: Uncaught exception 'MongoConnectionException' with message 'Transport endpoint is not connected'.

The only thing I am noticing is that right before the fail, I am getting a lots of connections on Mongo:

insert  query update delete getmore command flushes mapped  vsize    res faults locked % idx miss %     qr|qw   ar|aw  netIn netOut  conn       time        0    659      0      0       0       1       0   208m  1.28g    40m      0        0          0       0|0     0|0    62k   217k   486   03:57:20   

Almost 500 connections here... but never more than that!

Mongo is 2.0.3. PHP is 5.3.x (latest of Debian install...)

Help!

Modify DEFINER on Many Views

Posted: 30 Mar 2013 05:06 PM PDT

I have am having problems backing up my databases after an update. I have been poking around on my system trying to figure out why. One query I ran returned this result.

Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES  

After some investigation it appears that the definer for these views is an old developer account that has been purged from the system. The databases and views with this problem are used very infrequently, and most being kept around for archival purposes.

There is about 40 views with a definer that no longer exists. Is there an easy way to change the definer to a different account on everything at once? Is there a way to get mysqldump to simply dump all the views out to a file so I could edit that file and recreate the views?

SQL: SELECT All columns except some

Posted: 30 Mar 2013 05:09 PM PDT

Is there a way to SELECT all columns in a table, except specific ones? IT would be very convenient for selecting all the non-blob or non-geometric columns from a table.

Something like:

SELECT * -the_geom FROM segments;  
  • I once heard that this functionality was deliberately excluded from the SQL standard because changing adding columns to the table will alter the query results. Is this true? Is the argument valid?
  • Is there a workaround, especially in PostgreSQL?

No comments:

Post a Comment

Search This Blog