Beispiel #1
0
void SQLite::createDatabase(const String &name)
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	throw UnsupportedFeatureException("SQLite::createDatabase");
#endif
}
Beispiel #2
0
void SQLite::selectDB(const String &databasename)
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	throw UnsupportedFeatureException("SQLite:selectDB");
#endif
}
Beispiel #3
0
void SQLite::exec(const String &query)
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	if (!conn) throw NoConnectionException();
	String err;
	double t_start;
	affectedrows=0;
	sqlite3_stmt *stmt=NULL;
	t_start=GetMicrotime();
	int ret=sqlite3_prepare_v2((sqlite3*)conn, (const char*)query, query.size(),&stmt,NULL);
	if (ret!=SQLITE_OK) {
		throw QueryFailedException("sqlite3_prepare_v2 failed: %s",sqlite3_errmsg((sqlite3*)conn));
	}
	if (stmt==NULL) {
		throw OutOfMemoryException();
	}
	ret=sqlite3_step(stmt);
	if (ret!=SQLITE_DONE && ret!=SQLITE_ROW) {
		err.setf("sqlite3_step: %s, Query: %s",sqlite3_errmsg((sqlite3*)conn),(const char*)query);
		sqlite3_finalize(stmt);
		throw QueryFailedException(err);
	}
	ret=sqlite3_finalize(stmt);
	if (ret !=SQLITE_OK) {
		err.setf("sqlite3_finalize: %s, Query: %s",sqlite3_errmsg((sqlite3*)conn),(const char*)query);
		throw QueryFailedException(err);
	}
	affectedrows=sqlite3_changes((sqlite3*)conn);
	updateLastUse();
	logQuery(query,(float)(GetMicrotime()-t_start));
#endif
}
Beispiel #4
0
void SQLite::cancelTransactionComplete()
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	exec("ROLLBACK");
	transactiondepth=0;
	affectedrows=0;
#endif
}
Beispiel #5
0
void SQLite::reconnect()
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	close();
	AssocArray a=condata;
	connect(a);
#endif
}
Beispiel #6
0
void SQLite::close()
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite3");
#else
	if (!conn) {
		return;
	}
	sqlite3_close((sqlite3*)conn);
	conn=NULL;
	clearLastUse();
#endif
}
Beispiel #7
0
void SQLite::startTransaction()
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	if (transactiondepth==0) {	// Neue Transaktion
		exec("BEGIN");
		transactiondepth++;
	} else {
		execf("SAVEPOINT LEVEL%i",transactiondepth);
		transactiondepth++;
	}
#endif
}
Beispiel #8
0
void SQLite::cancelTransaction()
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	if (transactiondepth==1) {
		exec("ROLLBACK");
		transactiondepth=0;
	} else {
		execf("ROLLBACK TO SAVEPOINT LEVEL%i",transactiondepth-1);
		transactiondepth--;
	}
	affectedrows=0;
#endif
}
Beispiel #9
0
void SQLite::endTransaction()
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	if (transactiondepth==1) {
		exec("COMMIT");
		transactiondepth=0;
	} else {
		execf("RELEASE SAVEPOINT LEVEL%i",transactiondepth-1);
		transactiondepth--;
	}
	affectedrows=0;
#endif
}
Beispiel #10
0
String SQLite::escape(const String &str) const
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	// SQLite hat keine Escape-Funktion, daher müssen wir das selbst machen
	String n;
	const char *tmp=str.getPtr();
	int c;
	while ((c=tmp[0])) {
		if (c=='\'') n+="'";
		n+=c;
		tmp++;
	}
	return n;
#endif
}
Beispiel #11
0
/*!\brief Connect auf eine SQLite-Datenbank erstellen
 *
 * \descr
 * Mit dieser Funktion wird eine Verbindung zu einer SQLite Datenbank hergestellt, wobei
 * die dafür notwendigen Parameter dem Array \p params entnommen werden.
 * \par
 * Mögliche Parameter:
 * - \b filename: Dateiname der Datenbank
 *
 * \param params Ein Assoziatives Array mit den für den Connect erforderlichen Parameter.
 *
 * \exception OutOfMemoryException
 * \exception ConnectionFailedException
 *
 */
void SQLite::connect(const AssocArray &params)
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	if (conn) close();
	condata=params;
	String filename=params["filename"];
	int ret=sqlite3_open((const char*)filename,(sqlite3 **)&conn);
	if (!conn) throw OutOfMemoryException();
	if (ret != SQLITE_OK) {
		String err(sqlite3_errmsg((sqlite3*)conn));
		sqlite3_close((sqlite3*)conn);
		conn=NULL;
		throw ConnectionFailedException(err);
	}
#endif
}
Beispiel #12
0
ResultSet *SQLite::query(const String &query)
{
#ifndef HAVE_SQLITE3
	throw UnsupportedFeatureException("SQLite");
#else
	if (!conn) throw NoConnectionException();
	String err;
	double t_start;
	affectedrows=0;
	sqlite3_stmt *stmt=NULL;
	t_start=GetMicrotime();
	int ret=sqlite3_prepare_v2((sqlite3*)conn, (const char*)query, query.size(),&stmt,NULL);
	if (ret!=SQLITE_OK) {
		throw QueryFailedException("sqlite3_prepare_v2 failed: %s",sqlite3_errmsg((sqlite3*)conn));
	}
	if (stmt==NULL) {
		throw OutOfMemoryException();
	}
	ret=sqlite3_step(stmt);
	if (ret!=SQLITE_DONE && ret!=SQLITE_ROW) {
		err.setf("sqlite3_step: %s, Query: %s",sqlite3_errmsg((sqlite3*)conn),(const char*)query);
		sqlite3_finalize(stmt);
		throw QueryFailedException(err);
	}
	affectedrows=sqlite3_changes((sqlite3*)conn);
	updateLastUse();
	logQuery(query,(float)(GetMicrotime()-t_start));

	SQLiteResult *pr=new SQLiteResult;
	if (!pr) {
		sqlite3_finalize(stmt);
		throw OutOfMemoryException();
	}
	pr->stmt=stmt;
	pr->last_res=ret;
	pr->sqlite_class=this;
	pr->conn=(sqlite3 *)conn;
	pr->affectedrows=affectedrows;
	pr->num_fields=sqlite3_column_count(stmt);
	return pr;
#endif
}
Beispiel #13
0
void ImageFilter_PNG::save (const Drawable &surface, FileObject &file, const AssocArray &param)
{
#ifdef HAVE_PNG
	Color farbe;
	int pitch,colortype;
	//int r,g,b,a;
	int width,height;
	png_byte *buffer;
	png_color	pc[256];
	//RGBA	rgb;

	if (surface.isEmpty()) throw EmptyImageException();

	file.seek(0);
	width=surface.width();
	height=surface.height();

	pitch=colortype=0;
	int png_color_type=PNG_COLOR_TYPE_GRAY;
	int compression_level=Z_BEST_COMPRESSION;
	RGBFormat srgb=surface.rgbformat();
	if (srgb==RGBFormat::A8R8G8B8) png_color_type=PNG_COLOR_TYPE_RGB_ALPHA;

	if (param.exists("colortype")) png_color_type=param.getString("colortype").toInt();
	if (!png_color_type) png_color_type=PNG_COLOR_TYPE_RGB;

	switch (png_color_type) {
		case PNG_COLOR_TYPE_GRAY:
			colortype=PNG_COLOR_TYPE_GRAY;
			pitch=width*1;
			break;
		case PNG_COLOR_TYPE_PALETTE:
			colortype=PNG_COLOR_TYPE_PALETTE;
			pitch=width*1;
			break;
		case PNG_COLOR_TYPE_RGB:
			colortype=PNG_COLOR_TYPE_RGB;
			pitch=width*3;
			break;
		case PNG_COLOR_TYPE_RGB_ALPHA:
			colortype=PNG_COLOR_TYPE_RGB_ALPHA;
			pitch=width*4;
			break;
		case PNG_COLOR_TYPE_GRAY_ALPHA:
			colortype=PNG_COLOR_TYPE_GRAY_ALPHA;
			pitch=width*2;
			break;
		default:
			colortype=PNG_COLOR_TYPE_RGB;
			pitch=width*3;
			break;
	};


	png_structp png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL,NULL,NULL);
	if (!png_ptr) throw OperationFailedException("ImageFilter_PNG::save");
	png_infop info_ptr = png_create_info_struct(png_ptr);
	if (!info_ptr) {
		png_destroy_write_struct(&png_ptr,(png_infopp)NULL);
		throw OperationFailedException("ImageFilter_PNG::save");
	}

	if (setjmp(png_jmpbuf(png_ptr))) {
		png_destroy_write_struct(&png_ptr,&info_ptr);
		throw OperationFailedException("ImageFilter_PNG::save");
	}

	//png_set_read_fn(png_ptr,(voidp) file, (png_rw_ptr) user_read_data);
	png_set_write_fn(png_ptr, &file, (png_rw_ptr) user_write_data, (png_flush_ptr) user_flush_data);

	// Compression-Level setzen

	png_set_compression_level (png_ptr, compression_level);




	png_set_IHDR(png_ptr, info_ptr, width,height,8,colortype,
		PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);




	buffer=(png_byte*)png_malloc(png_ptr,pitch);
	if (!buffer) {
		png_destroy_write_struct(&png_ptr,&info_ptr);
		throw OutOfMemoryException();
	}
	if (buffer!=NULL) {
		// png_write_row(png_ptr, row_pointer);
		int bpp;
		switch (colortype) {
			case PNG_COLOR_TYPE_PALETTE:
				bpp=1;
				if (surface.rgbformat()==RGBFormat::Palette) {	// Surface verwendet Palette
					for (int i=0;i<256;i++) {
						// TODO:
						//surface->GetColor(i,&rgb);
						//pc[i].red=rgb.red;
						//pc[i].green=rgb.green;
						//pc[i].blue=rgb.blue;
					}
					png_set_PLTE(png_ptr,info_ptr, &pc[0], 256);
					png_write_info(png_ptr, info_ptr);
					//png_write_PLTE (png_ptr, &pc[0],256);

					for (int y=0;y<height;y++) {
						for (int x=0;x<width;x++) {
							farbe=surface.getPixel(x,y);
							buffer[x]=(ppluint8)(farbe.color()&0xff);
						}
						png_write_row(png_ptr, buffer);
					}
				} else {								// Surface verwendet keine Palette -> Konvertierung
					/* TODO:
					RGBA *pal=Get8BitTrueColorPalette ();
					for (int i=0;i<256;i++) {
						pc[i].red=pal[i].c.red;
						pc[i].green=pal[i].c.green;
						pc[i].blue=pal[i].c.blue;
						DLOG ("Farbe %i: RGB=%u, %u, %u",i,pc[i].red,pc[i].green,pc[i].blue);
					}
					png_set_PLTE(png_ptr,info_ptr, &pc[0], 256);
					png_write_info(png_ptr, info_ptr);
					//png_write_PLTE (png_ptr, &pc[0],256);

					for (y=area->top;y<area->bottom;y++) {
						DLOGLEVEL(2) ("png_write_row Zeile %u",y);
						for (x=0;x<width;x++) {
							farbe=surface->Surface2RGB(surface->GetPixel(area->left+x,y));
							r=(farbe&255)*7/255;
							g=((farbe>>8)&255)*7/255;
							b=((farbe>>16)&255)*3/255;
							buffer[x]=(ppldb)(r+(g<<3)+(b<<6));
						}
						png_write_row(png_ptr, buffer);
					}
					 */

				}
				break;
			case PNG_COLOR_TYPE_RGB:
				bpp=3;
				png_write_info(png_ptr, info_ptr);
				for (int y=0;y<height;y++) {
					for (int x=0;x<width;x++) {
						//farbe=surface->GetPixel(area->left+x,y);
						farbe=surface.getPixel(x,y);
						buffer[x*bpp+0]=(ppluint8)farbe.red();
						buffer[x*bpp+1]=(ppluint8)farbe.green();
						buffer[x*bpp+2]=(ppluint8)farbe.blue();
					}
					png_write_row(png_ptr, buffer);
				}
				break;
			case PNG_COLOR_TYPE_RGB_ALPHA:
				bpp=4;
				png_write_info(png_ptr, info_ptr);
				for (int y=0;y<height;y++) {
					for (int x=0;x<width;x++) {
						farbe=surface.getPixel(x,y);
						buffer[x*bpp+0]=(ppluint8)farbe.red();
						buffer[x*bpp+1]=(ppluint8)farbe.green();
						buffer[x*bpp+2]=(ppluint8)farbe.blue();
						buffer[x*bpp+3]=(ppluint8)farbe.alpha();
					}
					png_write_row(png_ptr, buffer);
				}
				break;
			case PNG_COLOR_TYPE_GRAY:
				bpp=1;
				png_write_info(png_ptr, info_ptr);
				for (int y=0;y<height;y++) {
					for (int x=0;x<width;x++) {
						farbe=surface.getPixel(x,y);
						buffer[x*bpp]=(ppluint8)farbe.brightness();
					}
					png_write_row(png_ptr, buffer);
				}

				break;
			case PNG_COLOR_TYPE_GRAY_ALPHA:
				bpp=2;
				png_write_info(png_ptr, info_ptr);
				for (int y=0;y<height;y++) {
					for (int x=0;x<width;x++) {
						farbe=surface.getPixel(x,y);
						buffer[x*bpp]=(ppluint8)farbe.brightness();
						buffer[x*bpp+1]=(ppluint8)farbe.alpha();
					}
					png_write_row(png_ptr, buffer);
				}
				break;
		}
		png_free(png_ptr,buffer);
	}

	png_write_end(png_ptr, info_ptr);
	png_destroy_write_struct(&png_ptr,&info_ptr);
#else
	throw UnsupportedFeatureException("ImageFilter_PNG");
#endif

}
Beispiel #14
0
void ImageFilter_PNG::load(FileObject &file, Drawable &surface, IMAGE &img)
{
#ifdef HAVE_PNG
	file.seek(0);
	png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL ,NULL, NULL);
    if (!png_ptr) throw IllegalImageFormatException();

    png_infop info_ptr = png_create_info_struct(png_ptr);
    if (!info_ptr)  {
        png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL);
        throw IllegalImageFormatException();
    }

    png_infop end_info = png_create_info_struct(png_ptr);
    if (!end_info) {
        png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
        throw IllegalImageFormatException();
    }

	png_set_read_fn(png_ptr, &file, (png_rw_ptr) user_read_data);

    //png_set_write_fn(png_structp write_ptr, voidp write_io_ptr, png_rw_ptr write_data_fn,
    //    png_flush_ptr output_flush_fn);

	png_read_info(png_ptr, info_ptr);

	//png_read_png(png_ptr, info_ptr,0,NULL);



	png_bytep row_pointer=(png_bytep) png_malloc(png_ptr,img.pitch);

	RGBFormat zformat=surface.rgbformat();		// Zielformat holen

	if (row_pointer!=NULL) {
		int bpp;
		switch (png_get_color_type(png_ptr, info_ptr)) {

		case PNG_COLOR_TYPE_RGB_ALPHA:
			//bpp=png_get_bit_depth(png_ptr, info_ptr);
			bpp=4;	// TODO: Bittiefe kann auch 16 Bit pro Farbkanal sein
			//printf ("PNG RGBA, bpp=%i\n",bpp);
			for (int y=0;y<img.height;y++) {
				png_read_row(png_ptr, row_pointer, NULL);
				for (int x=0;x<img.width;x++) {
					int r=row_pointer[x*bpp+0];
					int g=row_pointer[x*bpp+1];
					int b=row_pointer[x*bpp+2];
					int a=row_pointer[x*bpp+3];
					surface.putPixel(x,y,Color(r,g,b,a));
				}
			}
			break;
		case PNG_COLOR_TYPE_RGB:
			//bpp=png_get_bit_depth(png_ptr, info_ptr)/8;
			bpp=3;
			for (int y=0;y<img.height;y++) {
				png_read_row(png_ptr, row_pointer, NULL);
				for (int x=0;x<img.width;x++) {
					int r=row_pointer[x*bpp+0];
					int g=row_pointer[x*bpp+1];
					int b=row_pointer[x*bpp+2];
					surface.putPixel(x,y,Color(r,g,b,255));
				}
			}
			break;
		case PNG_COLOR_TYPE_GRAY:
			//bpp=png_get_bit_depth(png_ptr, info_ptr)/8;
			bpp=1;
			// Ist das Zielformat auch Greyscale?
			if (zformat==RGBFormat::A8 || zformat==RGBFormat::GREY8) {
				for (int y=0;y<img.height;y++) {
					png_read_row(png_ptr, row_pointer, NULL);
					for (int x=0;x<img.width;x++) {
						int r=row_pointer[x*bpp+0];
						surface.putPixel(x,y,Color(r,r,r));
					}
				}
			} else {
				for (int y=0;y<img.height;y++) {
					png_read_row(png_ptr, row_pointer, NULL);
					for (int x=0;x<img.width;x++) {
						int r=row_pointer[x*bpp+0];
						surface.putPixel(x,y,Color(r,r,r));
					}
				}
			}
			break;
		case PNG_COLOR_TYPE_GRAY_ALPHA:
			bpp=2;
			//bpp=png_get_bit_depth(png_ptr, info_ptr)/8;
			for (int y=0;y<img.height;y++) {
				png_read_row(png_ptr, row_pointer, NULL);
				for (int x=0;x<img.width;x++) {
					int r=row_pointer[x*bpp+0];
					int a=row_pointer[x*bpp+1];
					surface.putPixel(x,y,Color(r,r,r,a));
				}
			}
			break;
		case PNG_COLOR_TYPE_PALETTE:
			int num_trans=0;
			bpp=png_get_bit_depth(png_ptr, info_ptr)/8;
			png_colorp pal;
			int num_palette;
			png_get_PLTE(png_ptr, info_ptr, &pal,&num_palette);

			png_get_tRNS(png_ptr, info_ptr, NULL, &num_trans, NULL);

			/*
			if (num_trans>0) {
				r=pal[num_trans-1].red;
				g=pal[num_trans-1].green;
				b=pal[num_trans-1].blue;
				//surface->SetColorKey(surface->RGB(r,g,b,0));
			}
			*/
			for (int y=0;y<img.height;y++) {
				png_read_row(png_ptr, row_pointer, NULL);
				for (int x=0;x<img.width;x++) {
					int a=row_pointer[x*bpp+0];
					int r=pal[a].red;
					int g=pal[a].green;
					int b=pal[a].blue;
					if (num_trans>0) {
						if (a==num_trans-1) a=0; else a=255;
					} else a=255;
					surface.putPixel(x,y,Color(r,g,b,a));
				}
			}

			break;

		}
	} else {
		throw IllegalImageFormatException();
	}
	png_free(png_ptr,row_pointer);
	png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
#else
	throw UnsupportedFeatureException("ImageFilter_PNG");
#endif

}
Beispiel #15
0
/**********************************************************************************************
 * NextToken
 *********************************************************************************************/
XMLScanner::TOKEN XMLScanner::NextToken () {
    if (state == STATE_STREAM_END)
        return TOKEN_STREAM_END;

    do {
        switch (state) {
        /* Content */
        case STATE_CONTENT:
            switch (current) {
            /* Element tag */
            case '<' :
                state = STATE_ELEMENT_TAG;
                if (! output.isEmpty ()) {
                    // TODO : check for whitespace only elements ...
                    return TOKEN_CHARACTER_DATA;
                }
                break;

            case '&' :
                ReadReference ();
                break;

            case ']' :
                /* checks for invalid CDATA section end */
                ReadCharacter ();
                if (current == ']') {
                    ReadCharacter ();
                    if (current == '>') {
                        ReadCharacter ();
                        throw IllegalCharacterException ();
                    } else {
                        output.Append (']');
                        output.Append (']');
                        output.Append (current);
                    }
                } else {
                    output.Append (']');
                    output.Append (current);
                }
                break;

            default :
                output.Append (current);
                break;
            }
            break;

        /* Element Tag */
        case STATE_ELEMENT_START_OPENING:
            if (current == '!') {
                ReadCharacter ();
                state = STATE_SPECIAL_ELEMENT;

            } else if (current == '?') {
                ReadCharacter ();
                state = STATE_CONTENT;
                return ReadProcessingInstruction ();

            } else if (current == '/') {
                ReadCharacter ();
                state = STATE_ELEMENT_END_NAME;
                return TOKEN_ELEMENT_END_TAG;

            } else if (isNameFirst (current)) {
                state = STATE_ELEMENT_START_NAME;
                return TOKEN_ELEMENT_START_OPENING;

            } else {
                throw UnexpectedCharacterException (previous);
            }
            break;

        /* Special elements (comments and CDATA sections etc ...) */
        /* '<!' ... */
        case STATE_SPECIAL_ELEMENT:
            if (current == '-') {
                ReadComment ();
            } else if (current == '[') {
                ReadCDATASection ();
            } else {
                throw UnsupportedFeatureException (position);
            }
            state = STATE_CONTENT;
            break;

        /* Element start name target */
        /* '<' ... */
        case STATE_ELEMENT_START_NAME:
            if (isNameFirst (current)) {
                state = STATE_ELEMENT_ATTRIBUTES_START;
                return ReadQualifiedName ();
            } else {
                throw UnexpectedCharacterException (previous);
            }
            break;

        /* Element start name target */
        /* '</' ... */
        case STATE_ELEMENT_END_NAME:
            if (isNameFirst (current)) {
                state = STATE_ELEMENT_END_TAG;
                return ReadQualifiedName ();
            } else {
                throw UnexpectedCharacterException (previous);
            }
            break;

        /* Attributes */
        case STATE_ATTRIBUTES_START:
            if (isWhitespace (current)) {
                state = STATE_ATTRIBUTES;

            } else if (current == '/') {
                state = STATE_ELEMENT_END_CLOSING;

            } else if (current == '>') {
                state = STATE_CONTENT;
                return TOKEN_ELEMENT_START_CLOSING;

            } else {
                throw UnexpectedCharacterException (previous);
            }
            break;

        /* '<' QualifiedName ... */
        case STATE_ATTRIBUTES :
            if (isWhitespace (current)) {
                break;

            } else if (isNameFirst (current)) {
                state = STATE_ATTRIBUTE_EQUAL;
                return ReadQualifiedName ();

            } else {
                throw UnexpectedCharacterException (previous);
            }
            break;

        case STATE_ELEMENT_END_CLOSING:
            if (current == '>') {
                state = STATE_CONTENT;
                return TOKEN_ELEMENT_END_CLOSING;

            } else {
                throw UnexpectedCharacterException (previous);
            }
            break;


        case STATE_ATTRIBUTE_EQUAL:
            if (current == '\'' || current == '\"') {
                state = STATE_ATTRIBUTES_START;
                return ReadLiteral ();
            }
            break;

        case STATE_ELEMENT_END_TAG:
            if (current == '>') {
                state = STATE_CONTENT;
                return TOKEN_ELEMENT_END_TAG_CLOSING;
            }
            break;
        }

    } while (ReadCharacter ());

    /* Stream end */
    return TOKEN_STREAM_END;
}
Beispiel #16
0
static int out_bind(SOCKET sockfd, const char *host, int port)
{
	throw UnsupportedFeatureException("TCPSocket.connect after TCPSocket.bind");
}